二叉树层次遍历 binary-tree-level-order-traversal
题目描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
3↵ / ↵ 9 20↵ / ↵ 15 7
该二叉树层序遍历的结果是
[↵ [3],↵ [9,20],↵ [15,7]↵]
如果你不清楚“{1,#,2,3}“的含义的话,请继续阅读
我们用如下方法将二叉树序列化:
二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。
例如:
1↵ / ↵ 2 3↵ /↵ 4↵ ↵ 5
上述的二叉树序列化的结果是:”{1,2,3,#,#,4,#,#,5}".
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:
Given binary tree{3,9,20,#,#,15,7},
3↵ / ↵ 9 20↵ / ↵ 15 7↵
return its level order traversal as:
[↵ [3],↵ [9,20],↵ [15,7]↵]↵
confused what"{1,#,2,3}"means?
Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where ‘#’ signifies a path terminator where no node exists below.
Here’s an example:
1↵ / ↵ 2 3↵ /↵ 4↵ ↵ 5↵
The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".
示例
示例1
输入
{1,2}
输出
[[1],[2]]
示例2
输入
{1,2,3,4,#,#,5}
输出
[[1],[2,3],[4,5]]
解题思路
- 二叉树的层次遍历,用队列解决,注意保存每一层的节点数
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode* root) {
vector<vector<int> > res;
if(root == NULL) return res;
queue<TreeNode*> myque;
myque.push(root);
//只要队列不空
while(!myque.empty()) {
vector<int> cur; //保存当前层的所有节点值
int size = myque.size(); //每次先保存当前层的节点数
//当前层的所有节点全部依次出队并加入cur,然后把下一层的节点全部放进来,等待下一次大循环
for(int i = 0; i < size; i ++) {
TreeNode* p = myque.front();
myque.pop();
cur.push_back(p -> val);
if(p -> left) myque.push(p -> left);
if(p -> right) myque.push(p -> right);
}
res.push_back(cur);
}
return res;
}
};