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

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

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

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

 

知识回顾:

 

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

 

 

 

 

http://www.xdnf.cn/news/12406.html

相关文章:

  • 添加按钮跳转页面并且根据网站的用户状态判断是否显示按钮
  • CSS 性能优化
  • Langchain4J 向量模型和向量存储(9)
  • Power Query动态追加查询
  • 如何通过外网访问内网服务器?怎么让互联网上连接本地局域网的网址
  • 官网如何给下载VMware
  • [c#]判定当前软件是否用管理员权限打开
  • 【分享】推荐一些办公小工具
  • 【基础】每天掌握一个Linux命令 - awk
  • C++.OpenGL (11/64)材质(Materials)
  • 网页五子棋项目测试报告
  • Linux-http协议
  • 如何理解机器人课程的技术壁垒~壁垒和赚钱是两件不同的事情
  • cnn卷积神经变体
  • 多系统一键打包docker compose下所有镜像并且使用
  • NoSQL 之Redis哨兵
  • 最长回文子串问题-Manacher算法深度解析
  • 股指期货波动一个点多少钱?
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第一篇(排名不分先后)】
  • Dify工具插件开发和智能体开发全流程
  • 前端技能包
  • Compose基本介绍
  • Linux操作系统之进程(五):初识地址空间
  • 研究生遗产——历年AD检测比赛的研究简介
  • 智能运维如何让变电所“无人值守”还能降本增效?
  • 8.1_排序的基本概念
  • 【cmake】单配置生成器与多配置生成器的构建安装问题分析
  • 09.三数之和
  • 《零基础读懂新能源汽车》—— 新能源汽车充电革命:从逆变器原理到800V超充实战,一篇全掌握!
  • 【生成模型】【模型介绍】(二)图像编辑 主体驱动 光照调整