二叉树的层次遍历
2017-04-10 22:46
204 查看
一、问题描述
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树
返回他的分层遍历结果:
二、解题思路
定义两个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;
}
};
四、我的感想
层次遍历较前面三个遍历有所不同,层次遍历要定义队列,因为队列的先进先出原则可以使问题简单化,还要注意队列的弹出,这道题一开始思路不是很清晰,又上网查了一下,感觉也回顾了不少以前的知识。
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树
{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;
}
};
四、我的感想
层次遍历较前面三个遍历有所不同,层次遍历要定义队列,因为队列的先进先出原则可以使问题简单化,还要注意队列的弹出,这道题一开始思路不是很清晰,又上网查了一下,感觉也回顾了不少以前的知识。
相关文章推荐
- 662. Maximum Width of Binary Tree(二叉树层次遍历,二叉树标序号)
- 程序员面试100题(算法)之层次遍历二叉树(含二叉树前序创建、层次遍历、前序遍历)
- 二叉树系列---层次遍历二叉树
- LeetCode: 102_Binary Tree Level Order Traversal | 二叉树自顶向下的层次遍历 | Easy
- LintCode | 69. 二叉树的层次遍历
- 二叉树层次遍历-LintCode
- 二叉树的深度、叶子数以及先、中、后、层次遍历
- 数据结构例程——二叉树的层次遍历算法
- 二叉树层次遍历:Queue+每一层一个NULL标记
- 二叉树的层次遍历
- lintcode--二叉树的锯齿形层次遍历
- LintCode 二叉树的层次遍历 II
- 面试常考手写代码之--二叉树层次遍历(BFS)
- python——二叉树的层次遍历
- 二叉树的层次遍历
- 数据结构_求二叉树的高度以及层次遍历二叉树算法_C语言源代码
- 例题6-7 二叉树的层次遍历 UVa 122 Trees on the level
- LintCode 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历