当前位置: 首页 > article >正文

完全二叉树的4种遍历方式

一张二叉树的图

 1,二叉树的特点

  1. 每个点p的左儿子是p*2,右儿子是p*2+1,可以分别表示为p<<1与p<<1|1
  2. 节点的序号是从左到右,从上到下增加的
  3. 每个点至多2个儿子(屁话(bushi))

2,先序遍历(根左右)

就是每次到子树的根节点,先存入这个节点,然后优先访问左儿子,左儿子访问到回来,再访问右儿子(不是亲生的(que ren))

 顺序1->2->4->5(正在回家的路上)->3->6

int t[N];//t表示树上节点
int cnt;
void build(int p)
{
	cout<<t[p];//每次存储根节点后进入左儿子
	build(p<<1);
	build(p<<1|1);//左儿子出来后再进入右儿子
}

3,中序遍历(左根右)

每次到子树的根节点,先进入左儿子,回来后在访问根,最后再访问右儿子

 顺序4->2->5->1->6->3

int t[N];//t表示树上节点
int cnt;
void build(int p)
{
	build(p<<1);//每次x先进入左儿子,出来后再存储根节点
	cout<<t[p];
	build(p<<1|1);//根节点存储后后再进入右儿子
}

4,后序遍历(左右根)

依次访问左右儿子,再回来访问根节点

顺序是4->5->2->3->6->1

int t[N];//t表示树上节点
int cnt;
void build(int p)
{
	build(p<<1);//每次x先进入左儿子
	build(p<<1|1);//再进入右儿子
	cout<<t[p];//最后存储根节点
}

5,层序遍历

就是一层一层访问,这次不再是遍历了,我们观察序号,其实

t[1]~t[n]就是点1~n的层序遍历

int t[N];//t表示树上节点
int cnt;
for (int i=1; i<=n; ++i)cout<<t[i]<<endl;

 


http://www.kler.cn/a/4496.html

相关文章:

  • 近红外简单ROI分析matlab(NIRS_SPM)
  • jenkins-系统配置概述
  • Flink 应用
  • 像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决
  • 智能化植物病害检测:使用深度学习与图像识别技术的应用
  • 《AI赋能鸿蒙Next,开启智能关卡设计新时代》
  • 【Python语言基础】——Python 关键字
  • 一个PHP实现的轻量级简单爬虫
  • Java中的volatile关键字的作用
  • 《Spring系列》第11章 别名机制
  • UART、RS232 、RS485 区别
  • Kotlin的数据流
  • java反编译工具
  • Springboot整合rabbitmq并实现消息可靠性和持久性
  • css3 position定位—— sticky 定位
  • Maven - Explain in Detail
  • spark笔记(自用)
  • 进程与子进程
  • java源码阅读 - HashTable
  • 提升代码可读性,减少 if-else 的几个小技巧
  • 合泰HT32单片机使用PDMA和ADC采集多路模拟值并显示在OLED屏上
  • Vue+springboot笔记本电脑商城销售系统
  • 校招失败后,在外包公司熬了 2 年终于进了字节跳动,竭尽全力....
  • python Django运用——(1.创立项目)
  • 进程与线程的关系
  • 【协议】03、深度解剖之HTTP协议