二叉树的层次遍历
2017-04-18 11:53
197 查看
二叉树的层次遍历
题目描述:
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)。样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3 / \ 9 20 / \ 15 7
返回他的分层遍历结果:
[ [3], [9,20], [15,7] ]
解题思路:
利用队列的特性,将根结点放入事先建好的队列中,若队列的长度不为0,则在队列中删除根结点,同时把根结点插入向量中以及把它的左右儿子放进队列中,以此类推,这样便能达到层次遍历的要求。
代码实现:
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>>lever;
if(root==NULL) return lever;
vector<int>dlever;
queue<TreeNode*>q;
q.push(root);
int i=1;
int j=0;
while(!q.empty()){
TreeNode *p=q.front();
q.pop();
if(p==NULL) {
++j;
}
else {
dlever.push_back(p->val);
q.push(p->left);
q.push(p->right);
}
if(i==(dlever.size()+j)&&dlever.size()!=0){
lever.push_back(dlever);
dlever.clear();
i=i*2;
j=j*2;
}
}
return lever;
}
};
A题感悟:
我觉得这道题有些难,虽然思路好理解,但是代码实现总是不行,所有就借鉴了一下别人的代码。在此代码中学会了队列还有双重向量的一些用法,也算收获不少。相关文章推荐
- 二叉树的层次遍历
- 再谈二叉树的层次(宽度)遍历
- LeetCode: 107_Binary Tree Level Order Traversal II | 二叉树自底向上的层次遍历 | Easy
- 根据前序和中序便遍历构造完整二叉树,并输出层次遍历
- 层次遍历二叉树
- UVa122二叉树的层次遍历
- 微软面试100题系列---二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树建立以及先序、中序、后序、层次遍历(JAVA 实现)
- 二叉树层次遍历
- 二叉树层次遍历与递归释放
- leetcode 二叉树层次遍历输出Binary Tree Level Order Traversal
- 层次遍历二叉树的方法(递归,队列,指针)
- 把二叉树打印成多行(二叉树的层次遍历)
- 层次遍历二叉树
- Leetcode 107. Binary Tree Level Order Traversal II 二叉树层次遍历2 解题报告
- [置顶] 二叉树层次遍历的应用--判断一颗二叉树是否为规则二叉树
- 二叉树的层次遍历
- 二叉树(前中后序递归非递归遍历,层次遍历,C++实现)
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法