二叉树的层序遍历
Posted 落禅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的层序遍历相关的知识,希望对你有一定的参考价值。
107. 二叉树的层序遍历 II
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \\
9 20
/ \\
15 7
返回其自底向上的层序遍历为:
[
[15,7],
[9,20],
[3]
]
首先完成二叉树的层序遍历,然后将数组进行逆置,就完成了自低向下的二叉树的层序遍历,故此题的难点是完成二叉树的层序遍历
这里我们借助队列来实现,利用队列先进先出的特性录入每一个节点的值
class Solution {
public:
//利用队列进行实现
vector<vector<int>> levelOrderBottom(TreeNode* root) {
queue<TreeNode*>q;
vector<vector<int>>vv;
//判断头结点是否为空,如果不为空就让头结点进入队列
if(root!=nullptr)
{
q.push(root);
}
int levelsize=0;//用来控制每一层遍历的个数
while(!q.empty())
{
vector<int>v;
levelsize=q.size();
//每一层的遍历
for(int i=0;i<levelsize;i++)
{
//记录当前节点
TreeNode*front=q.front();
q.pop();
//将当前节点的值录入数组
v.push_back(front->val);
//让当前节点的左孩子进入队列
if(front->left!=nullptr)
{
q.push(front->left);
}
//让当前节点的右孩子进入队列
if(front->right!=nullptr)
{
q.push(front->right);
}
}
vv.push_back(v);
}
//反转数组
reverse(vv.begin(),vv.end());
return vv;
}
};
以上是关于二叉树的层序遍历的主要内容,如果未能解决你的问题,请参考以下文章