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

数据结构——二十、树与森林的遍历

文章目录

  • 前言
  • 一.树的遍历
    • 1.树的先根遍历(深度优先遍历)
      • 1.定义以及遍历过程
      • 2.伪代码实现
      • 3.树的先根遍历与二叉树的先序遍历的关系
    • 2.树的后根遍历(深度优先遍历)
      • 1.定义以及遍历过程
      • 2.伪代码实现
      • 3.树的后根遍历与二叉树的后序遍历的关系
    • 3.树的层次遍历(广度优先遍历)
      • 1.定义以及遍历过程
  • 二.森林的遍历
    • 1.森林的先序遍历
      • 1.定义与遍历过程
      • 2.森林的先序遍历与二叉树的先序遍历的关系
    • 2.森林的中序遍历
      • 1.定义与遍历过程
      • 2.森林的中序遍历与二叉树的中序遍历的关系
  • 三.知识回顾与重要考点
  • 结语

前言

本文介绍了树和森林的遍历方法及其与二叉树遍历的关系。主要内容包括:1. 树的先根遍历(深度优先)及其与二叉树先序遍历的等价性;2. 树的后根遍历及其与二叉树中序遍历的对应关系;3. 树的层次遍历(广度优先)的队列实现过程。对于森林遍历,阐述了先序遍历等同于依次对各树进行先根遍历,中序遍历等同于后根遍历,并说明它们分别对应二叉树的先序和中序遍历。文章最后总结了这些遍历方法的重要考点,并附有伪代码实现和图示说明。

一.树的遍历

1.树的先根遍历(深度优先遍历)

1.定义以及遍历过程

在这里插入图片描述

  • 若树非空,先访问根结点,再依次对每棵子树进行先根遍历。
  • 例如,对途中树执行先根遍历的过程为:
第一步ABCD
第二步A(BEF)(CG)(DHIJ)
第三步A(B(EK)F)(CG)(DHIJ)

2.伪代码实现

//树的先根遍历
void PreOrder(TreeNode *R){if (R!=NULL){visit(R); //访问根节点while(R还有下一个子树T)PreOrder(T); //先根遍历下一棵子树}
}

3.树的先根遍历与二叉树的先序遍历的关系

  • 将图中的例子转化为二叉树
    在这里插入图片描述

  • 可发现:对树的先根遍历序列,和与之对应的二叉树的先序遍历序列是相同的

2.树的后根遍历(深度优先遍历)

1.定义以及遍历过程

在这里插入图片描述

  • 若树非空,先依次对每棵子树进行后根遍历,最后再访问根结点。
  • 例如,对图中的树进行后根遍历的过程为:
    在这里插入图片描述

2.伪代码实现

//树的先根遍历
void PreOrder(TreeNode *R){if (R!=NULL){while(R还有下一个子树T)PreOrder(T); //先根遍历下一棵子树visit(R); //访问根节点}
}

3.树的后根遍历与二叉树的后序遍历的关系

  • 将图中的例子转化为二叉树
    在这里插入图片描述

  • 可发现:树的后根遍历序列与这棵树相应二叉树的中序序列相同。

3.树的层次遍历(广度优先遍历)

由于我们在进行层次遍历的时候,探索的范围尽可能的广,因此又叫广度优先遍历

1.定义以及遍历过程

在这里插入图片描述

  • 层次遍历(用队列实现)
    ①若树非空,则根节点入队
    ②若队列非空,队头元素出队并访问,同时将该元素的孩子依次入队
    ③重复②直到队列为空
  • 如图中的树进行层次遍历,过程为:
    1. 根节点入队
      在这里插入图片描述

    2. 接下来要做的事情是每一次把对头元素出队,并且访问这个元素,那如果这个元素有孩子的话,那需要把他的孩子节点依次的入队
      在这里插入图片描述

    3. 后面的操作类似,最终的得到的序列为:
      在这里插入图片描述

二.森林的遍历

1.森林的先序遍历

1.定义与遍历过程

在这里插入图片描述

  • 先序遍历森林。
    若森林为非空,则按如下规则进行遍历:
    访问森林中第一棵树的根结点。
    先序遍历第一棵树中根结点的子树森林。
    先序遍历除去第一棵树之后剩余的树构成的森林。

  • 上图所示森林的先序遍历过程为
    在这里插入图片描述

  • 其效果等同于依次对各个树进行先根遍历

2.森林的先序遍历与二叉树的先序遍历的关系

  • 把上图的森林转化为二叉树为:
    在这里插入图片描述

  • 可以发现:森林的先序遍历等同于依次对二叉树的先序遍历

2.森林的中序遍历

1.定义与遍历过程

在这里插入图片描述

  • 中序遍历森林
    若森林为非空,则按如下规则进行遍历:
    中序遍历森林中第一棵树的根结点的子树森林。
    访问第一棵树的根结点。
    中序遍历除去第一棵树之后剩余的树构成的森林。

  • 上图所示森林的中序遍历过程为
    在这里插入图片描述

  • 效果等同于依次对各个树进行后根遍历

2.森林的中序遍历与二叉树的中序遍历的关系

  • 把上图的森林转化为二叉树为:
    在这里插入图片描述

  • 可以发现:森林的中序遍历等同于依次对二叉树的中序遍历

三.知识回顾与重要考点

在这里插入图片描述

结语

最近因为写二叉树的作业耽搁了更新,因为二叉树实在太难了,我花了很多时间去理解透彻,现在终于有时间更新了,没记错我应该是欠了4章了,现在补第一章😖

如想观看更多章节笔记,请点击 一、数据结构专栏导航页

http://www.dtcms.com/a/490069.html

相关文章:

  • 洛杉矶服务器常见问题汇总与解决方案大全
  • Linux云计算基础篇(27)-NFS网络文件系统
  • Mac安装使用Gradle
  • 夜莺监控设计思考(二)边缘机房架构思考
  • AI+大数据时代:时序数据库的架构革新与生态重构
  • 【记录】MAC本地微调大模型(MLX + Qwen2.5)并利用Ollama接入项目实战
  • wordpress 导购站模板接私活app有哪些平台
  • 有哪些网站可以做推广十大奢侈品牌logo图片
  • 服务注册 / 服务发现 - Eureka
  • 2025机器人自动化打磨抛光设备及汽车零件打磨新技术10月应用解析
  • bk7258 libzip崩溃之解决
  • 【Android】【底层机制】组件生命周期以及背后的状态管理
  • CPM:CMake 包管理详细介绍
  • D3.js + SVG:数据可视化领域的黄金搭档,绘制动态交互图表。
  • 【个人成长笔记】在 QT 中 SkipEmptyParts 编译错误信息及其解决方案
  • 设计模式篇之 备忘录模式 Memento
  • dw做的网站放文件夹网页生成桌面快捷方式
  • 2017流行的网站风格随州网站建设价格
  • 鸿蒙:使用媒体查询监听屏幕方向、切换横竖屏
  • 8.list的使用
  • 网页跳转github镜像
  • 安灯系统(Andon)如何为汽车工厂打造零延迟响应
  • C++(条件判断与循环)
  • 温州建设局网站首页中国企业名录黄页
  • linux/centos迁移conda文件夹
  • Quill 富文本编辑器 功能介绍,使用场景说明,使用示例演示
  • 网站生成器怎么做网站建设与管理实训主要内容
  • 网站信用认证可以自己做吗稀奇古怪好玩有用的网站
  • MySQL 基础语句
  • Linux中CPU初始化和调度器初始化函数的实现