题目描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
示例1
思路: 在数据结构中BFS遍历序列和层序遍历序列一致故可以用BFS算法实现层序遍历。基本思想是,先让头节点入队,然后再其出队之后将其左右孩子入队,就是在每一个结点出队时随即让其左右孩子入队,这样可以保证队列中的元素个数总与该层的结点数一致。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrder(TreeNode* root) {
vector<vector<int>>res;
if(!root)return res;//表示该树为空树
queue<TreeNode*> q;
q.push(root);
while (!q.empty())
{
vector<int> cen;
int size=q.size();//当前队列元素个数代表该层元素个数
while(size--)//按照输出格式进行输出
{
TreeNode*node=q.front();
cen.push_back(node->val);
q.pop();
if(node->left)q.push(node->left);//让出队的结点的左右孩子入队
if(node->right)q.push(node->right);
}
if(cen.size()>0)res.push_back(cen);//如果该层有结点
}
return res;
}
};