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

5.4.3树和森林的遍历

知识总览:

树的逻辑结构:

树是一种递归定义的数据结构,可以用递归算法实现对树的遍历(不知道,可能吧。。。。。)

 

树的先根遍历:

根节点不为空,先访问根节点,然后再对根节点的各个子树进行先序遍历访问,访问时按照从左到右子树的顺序进行访问

如下:根节点为A,A的子树为B、C、D,即A BCD的顺序,再从左到右对B的子树进行先序遍历根左右即BEF(即对B进行拆分),E还有分支,再对E的分支进行先序遍历访问即EK则为ABEFK,再对A的子树C进行先序遍历即CG,再对D的子树进行先序遍历,先H且H无分支再对I节点进行访问I无分支再对J进行先序遍历访问J无分支则结束

代码同根节点不为空访问根节点,然后判断根节点是否还有子树,有的话开始递归!!!大概是这样吧。。。。。。

树的后根遍历:

如果树不空,依次对每个子树进行后跟遍历最后访问根节点

如下:按照左右根的顺序是B、C、D、A,依次先对B进行后根遍历,B有分支则对B后跟遍历为EFB,E节点还有分支则对E后根遍历为KE即KEFBCD,再对C分支后根遍历为GC,再对D分支后根遍历HIJD(D是根节点最后访问,HIJ子树从左到右依次进行后跟遍历,因为都没有分支直接为HIJ)即KEFBCDGCHIJDA

代码同都是递归遍历,先递归各个子树后根遍历,最后根节点访问

树的后根遍历+先根遍历=树的深度优先遍历,优先往深处走

 

树的层次遍历:

和二叉树同都是一层层遍历,用一个辅助队列先根节点(树不为空)入队,然后队列不为空则队头根节点出队访问根节点,再根节点的孩子入队,再依次队头出队,队头的孩子节点入队,重复这个步骤直到队列为空

 

森林的 先序遍历:

森林由多个树构成,把每个树去掉根节点后当前树剩下的节点又在当前树中组成了一个森林。

即对各个树进行先序遍历最后把序列组合在一起即可

如下图对根节点为B的树进行先序遍历,跟上述例子同即为BEKLF,再对根节点为C的树进行先序遍历,上同CG,再对D根节点进行先序遍历即DHMIJ,合在一起即为BEKLFCGDHMIJ

或者把森林先转成二叉树,转成求二叉树的先序遍历,因为森林的先序遍历和二叉树的先序遍历同

森林的中序遍历:

即对各个树进行中序遍历最后把序列组合在一起即可

如下图对根节点为B的树进行后根遍历(左右根),上同例子为KLEFB,再对根节点为C的树进行后根遍历,即GC,再对D根节点进行后根遍历即MHIJD,合在一起即为KLEFBGCMHIJD

或者把森林先转成二叉树,转成求二叉树的中序遍历,因为森林的中序遍历和二叉树的中序遍历同

如果考试中考到了森林的代码题建议转成二叉树形态 

 

知识回顾:

 

。。。。。。。。。。。不知道在记录什么。。。。。。。 

 

 

 

 

相关文章:

  • Caliper 配置文件解析:fisco-bcos.json
  • 极空间z4pro配置gitea mysql,内网穿透
  • 3.lombok
  • 汉诺塔问题深度解析
  • 【Block总结】EBlock,快速傅里叶变换(FFT)增强输入图像的幅度|即插即用|CVPR2025
  • 【AI】智驾地图在不同自动驾驶等级中的作用演变
  • python时间操作笔记
  • VBA之Excel应用第四章第四节:单元格对象的Clear方法和Count属性
  • Gojs渲染实线、虚线
  • JavaScript 中的单例内置对象:Global 与 Math 的深度解析
  • RFC8489-STUN
  • [蓝桥杯]解谜游戏
  • 凌晨四点的星光
  • Delphi 实现远程连接 Access 数据库的指南
  • MySQL基础(一)介绍、下载及安装
  • Hubstudio浏览器如何使用Loongproxy?
  • libGL error
  • MS8258D 高增益带宽积 FET 输入放大器/激光雷达接收跨阻放大器
  • arcpy与扩展模块
  • Android Test3 获取的ANDROID_ID值不同
  • 免费php空间/龙岗seo优化
  • 手机网站案例/广州seo关键词优化外包
  • wordpress导航图标代码/android优化大师
  • 个人网站类型/推广app的单子都在哪里接的
  • 网站建设万网/成都最新疫情
  • 游戏是怎么开发出来的/seo关键词排名优化报价