二叉树的层序遍历及其变形

文章目录

二叉树的层序遍历

二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
在这里插入图片描述

示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]

层序遍历
使用队列,队头出队带入他的左右节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ret;//用来记录的是每一层的元素
queue<TreeNode*> s;//用来入队,出队带入左右节点
int levelsize=0;
if(root)//如果根不为空,就入队,进行后续的操作
{
s.push(root);
levelsize=1;
}

while(!s.empty())//当队列为空,就结束了
{
levelsize=s.size();
vector<int> v;
while(levelsize--)//队列一层的元素
{
TreeNode* parm=s.front();//记录队头
v.push_back(parm->val);//先入队
if(parm->left)//左不为空,带入
{
s.push(parm->left);

}
if(parm->right)
{
s.push(parm->right);

}
s.pop();//出队
}
ret.push_back(v);//插入一层的元素

}
return ret;
}

变形

  1. 计算第k层的节点个数
    
1
size=ret[k-1];
  1. 计算一共的节点个数
    
1
2
3
4
for(auto e:ret)
{
total+=e.size();//将每一个的元素个数相加
}
  1. 计算深度
    
1
hight=ret.size();//ret的个数
  1. 二叉树自底向上遍历
    
1
reverse(ret.begin(),ret.end());//翻转一下即可

二叉树的层序遍历及其变形
http://example.com/2022/08/30/二叉树的层序遍历及其变形/
作者
Zevin
发布于
2022年8月30日
许可协议