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] ]
题目解析:
层序遍历,设置队列,入队列出队列即可。
为了能够更方便的操作,可以设置两个队列,当对队列1进行出队列,将其子孩子放入队列2中。遍历完后,将队列2中元素赋值给队列1。
另外一种是只用一个队列实现。当开始进行下一层循环时,用个变量n保存当前队列中元素的个数。然后for循环n次,将n个结点的子节点放入队列。下次循环时,再求一次n,就得到新的一层的子节点个数。注意,这里不能i<queue.size(),必须用n,因为我们动态向队列中添加元素。
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
if(root == NULL)
return res;
queue<TreeNode *> tree;
tree.push(root);
while(!tree.empty()){
vector<int> node;
TreeNode *p;
int n = tree.size(); //如果用一个队列完成的话,必须先保存队列中的值,队列的值会重新计算。
for(int i = 0;i < n;i++){
p = tree.front();
tree.pop();
if(p->left) tree.push(p->left);
if(p->right) tree.push(p->right);
node.push_back(p->val);
}
res.push_back(node);
}
return res;
}
private:
vector<vector<int> > res;
};