题目描述:
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
分析:
利用队列进行二叉树的层次遍历很简单。
怎么样按照层次输出二维数组? 这个算是比较新颖。
我们发现,利用队列中的元素个数可以解决这个问题。
当我们遍历完第i层时,队列中的元素都是i+1层的。此时队列的大小就是第i+1层的大小。
所以我们是一层一层的遍历,每次先求出这一层的元素个数有多少,再利用for循环全部访问完,这样一层的工作就完成了,下一次也同样先求元素个数,如此反复。
注意二叉树为空的情况,要特判。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int> > ans;
queue<TreeNode*> q;
if (root==NULL) return ans;
q.push(root);
while (!q.empty()){
int size=q.size();
vector<int> a;
for (int i=1; i<=size; i++){
TreeNode* t=q.front();
a.push_back(t->val);
if (t->left!=NULL) q.push(t->left);
if (t->right!=NULL) q.push(t->right);
q.pop();
}
ans.push_back(a);
}
return ans;
}
};