二叉树的层次遍历
来源:互联网 发布:java b2b2c 编辑:程序博客网 时间:2024/06/07 01:21
一、问题描述
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7}
:
3 / \9 20 / \ 15 7
返回他的分层遍历结果:
[ [3], [9,20], [15,7]]
定义两个vector容器,一个存储每一层的节点(r),另一个存储层次遍历的结果(p),然后定义一个队列q,然后定义一个指针x指向队列的头结点,即根节点,并把节点放入r中,然后再弹出(因为队列有先进先出的原则),队列长度减一。再放入左子树和右子树,直到队列的长度为0跳出循环。要注意r存储完一层节点放入p中就清空,然后再存储下一层节点,这样即实现了二叉树的层次遍历啦。
三、我的代码
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) {
vector<int> r;
vector<vector <int>> p;
if(root==NULL) return p;
queue<TreeNode*>q;
q.push(root);
while(!q.empty())
{
int l=q.size();
while(l!=0)
{
TreeNode *x=q.front();
r.push_back(x->val);
q.pop();
l--;
if(x->left!=NULL) q.push(x->left);
if(x->right!=NULL) q.push(x->right);
}
p.push_back(r);
r.clear();
}
return p;
}
};
四、我的感想
层次遍历较前面三个遍历有所不同,层次遍历要定义队列,因为队列的先进先出原则可以使问题简单化,还要注意队列的弹出,这道题一开始思路不是很清晰,又上网查了一下,感觉也回顾了不少以前的知识。
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历!!!
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- Unity5.×烘焙常规处理步骤
- 常用页面置换算法总结
- 几种常用的排序方法
- Ant入门基础教程
- 阿里云ubuntu 16.04 Server配置方案 4 VPS面板 ajenti
- 二叉树的层次遍历
- 初识设备驱动程序之Hello world
- SQL Server 2008 自动备份数据库
- Ubuntu14.04 x64系统设置Qt5.8桌面快捷方式
- 博客
- MATLAB的cat()函数
- 哈希表:一个字符串是否包含另一个字符串的所有字符
- 如何设置idea开发工具的界面字体大小
- 字符型变量sizeof()