求二叉树的层序遍历(NC15/考察次数Top6/难度中等)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求二叉树的层序遍历(NC15/考察次数Top6/难度中等)相关的知识,希望对你有一定的参考价值。
描述:
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
示例1
输入:
{1,2}
返回值:
[[1],[2]]
示例2
输入:
{1,2,3,4,#,#,5}
返回值:
[[1],[2,3],[4,5]]
(题目来自牛客网)
用C++实现如下
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/ //定义树的结构,int val,struct TreeNode *left,struct TreeNode *right
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int>> levelOrder(TreeNode* root) {
//write code here
//思路,二叉树的层序遍历,使用queue(先进先出的结构)来进行解决,每次记录下当前队列的大小
vector<vector<int>> res; //此处定义一个双层嵌套的vector,每一层遍历得到的值组成一个vector
//,然后每一层的vector又push到一个双层嵌套的vector中返回结果
if(root == nullptr)
return res;
queue<TreeNode*> que; //使用queue来实现,先进先出,则先左后右
que.push(root); //把根部push进去
while(que.size()) //que不为空则表示还未遍历完,需要一直遍历下去
{
int nums = que.size(); //每次处理一层的所有元素
vector<int> vec;
while(nums--) //搞出一层的结果,得到一层的vector
{
TreeNode *node = que.front(); //取queue最前面的值
que.pop(); //弹出最前面的值
vec.push_back(node->val); //将结果放入存储一层结果的vec容器中
if(node->left) //queue为先进先出的结构,先放入左边,然后放入右边
que.push(node->left);
if(node->right)
que.push(node->right);
}
if(vec.size() > 0) //遍历完一层有结果则放进res里面
res.push_back(vec);
}
return res; //最后遍历完二叉树后,返回最终结果
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于求二叉树的层序遍历(NC15/考察次数Top6/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章
二叉树的之字形层序遍历(NC14/考察次数Top21/难度中等)