描述:
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例:
给一棵二叉树 {3,9,20,#,#,15,7}
:
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
1.这个题我们主要采用队列的先进先出的思想。
2.首先先建一个队列q,用来存放二叉树每一层的节点。定义一个lengh,来确定每一层节点的个数,进而确定当前内循环的次数。
3.每次内循环中我们需要做的工作就是读取当前队列的队头,赋值给临时变量temp,删除队列中的队头,读取temp中节点的左右子树,
放入对尾,这样每次内循环进行该层节点的个数次,将这层节点的val值放入一个vector中。
4.最后把这组vector再放入整个的vector中。
代码:
/**
* 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>> va;
int length=1;
queue<TreeNode *> q;
TreeNode *temp;
void level(TreeNode *root)
{
q.push(root);
while(!q.empty())
{
vector<int> v;
int k=0,i;
for(i=0;i<length;i++)
{
temp=q.front();
q.pop();
if(temp->left != NULL)
{
k++;
q.push(temp->left);
}
if(temp->right != NULL)
{
k++;
q.push(temp->right);
}
v.push_back(temp->val);
}
length=k;
va.push_back(v);
}
}
vector<vector<int>> levelOrder(TreeNode *root) {
// write your code here
if(root==NULL)
return va;
level(root);
return va;
}
};