lintcode——二叉树的层次遍历
来源:互联网 发布:淘宝的快递软件叫啥 编辑:程序博客网 时间:2024/04/29 06:45
1、题目
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7}
:
3 / \9 20 / \ 15 7
返回他的分层遍历结果:
[ [3], [9,20], [15,7]]
2、思路
层次遍历比前、中、后序遍历多了一些要处理的问题,比如:如何将每一层放进一组里?怎么保证层与层之间是在不同分组里面?
层次遍历就要考虑用队列来存放数据了,所以首先把根节点放进队列,之后开始每次判断队列不空则要建立一个vector来存每一层的数,为了隔开每一层的数一定要记得对vector里push完一层就要清空队始列!!最后把每一个小分组push进一个向量里面。
至于该到什么时候停止一层数据的划分,就要对每一层数据的个数计数。
我觉得以上两点是最重要的操作了。
3、代码
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public:
vector<vector<int>> levelOrder(TreeNode *root) {
// write your code here
vector<vector<int>>T;
queue<TreeNode*>q;
if(root==NULL)
{ return T; }
q.push(root);
int length=1;
while(!q.empty())
{
vector<int> t;
length=q.size();
while(length--)
{
TreeNode *temp=q.front();
t.push_back(temp->val);
q.pop();
if(temp->left)
q.push(temp->left);
if(temp->right)
q.push(temp->right);
}
T.push_back(t);
}
return T;
}
};
4、感想
思路里提到的两点,觉得以后还会用到的,尤其是计数。
层次遍历试了好几遍才ac,一直在纠结该怎么实现停止向队列里放元素,计数啊计数啊!!
这道题目要求的输出格式很有意思~~点赞!
- lintcode——二叉树的层次遍历
- LintCode-二叉树的层次遍历 II
- LintCode 二叉树的层次遍历
- LintCode 二叉树的层次遍历 II
- lintcode-二叉树的层次遍历-69
- LintCode:二叉树的层次遍历
- LintCode:二叉树的层次遍历 II
- LintCode:二叉树的锯齿形层次遍历
- LintCode 二叉树的锯齿形层次遍历
- Lintcode(M) 二叉树的层次遍历
- 二叉树的锯齿形层次遍历,lintcode
- 二叉树的层次遍历 II,lintcode
- 二叉树的层次遍历,lintcode
- LintCode 69-二叉树的层次遍历
- LintCode | 69. 二叉树的层次遍历
- LintCode-二叉树的层次遍历
- lintcode 二叉树的层次遍历
- LintCode 二叉树的层次遍历
- ThinkPHP3.2.3 二级域名设置深入(包括一系列问题的解决方案)
- 多项式加法
- 导入项目出现:Cannot change version of project facet Dynamic Web module to 3.0和Dynamic Web Module 3.0 requi
- java i/o学习总结
- Codeforces 407(div1)
- lintcode——二叉树的层次遍历
- //关于函数ZwQuerySystemInformation的第一个参数 SystemInformationClass
- 角点特征检测
- 关于反爬虫的一点了解
- 欢迎使用CSDN-markdown编辑器
- 给一个正在运行的Docker容器动态添加Volume
- Android源码分析:Android中的设计模式——观察者模式
- 一个易错的while循环问题
- Android menu的分类和用法