题目描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7}
该二叉树层序遍历的结果是
[[3], [9,20], [15,7] ]
分析
- 二叉树的层次遍历可以用
BFS
来实现,使用一个队列queue
来实现 - 要区分每一层节点的个数,可以考虑每次访问时,访问同一层的所有元素,将下一层的所有元素放入队列(使用
size
函数来计算一层节点数)
程序设计
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
vector<vector<int> > res;
queue<TreeNode*> q;
if (root == NULL) return res;
q.push(root);
vector<int> v;
while(!q.empty()){
v.clear();
// 将同一层的节点全部出队
int size = q.size();
while (size--){
TreeNode* temp = q.front();
v.push_back(temp->val);
if (temp->left) q.push(temp->left); // 下一层所有节点入队
if (temp->right) q.push(temp->right);
q.pop();
}
res.push_back(v); // 存储当前层的节点输出
}
return res;
}
};