数据结构——二十、树与森林的遍历
文章目录
- 前言
- 一.树的遍历
- 1.树的先根遍历(深度优先遍历)
- 1.定义以及遍历过程
- 2.伪代码实现
- 3.树的先根遍历与二叉树的先序遍历的关系
- 2.树的后根遍历(深度优先遍历)
- 1.定义以及遍历过程
- 2.伪代码实现
- 3.树的后根遍历与二叉树的后序遍历的关系
- 3.树的层次遍历(广度优先遍历)
- 1.定义以及遍历过程
- 二.森林的遍历
- 1.森林的先序遍历
- 1.定义与遍历过程
- 2.森林的先序遍历与二叉树的先序遍历的关系
- 2.森林的中序遍历
- 1.定义与遍历过程
- 2.森林的中序遍历与二叉树的中序遍历的关系
- 三.知识回顾与重要考点
- 结语
前言
本文介绍了树和森林的遍历方法及其与二叉树遍历的关系。主要内容包括:1. 树的先根遍历(深度优先)及其与二叉树先序遍历的等价性;2. 树的后根遍历及其与二叉树中序遍历的对应关系;3. 树的层次遍历(广度优先)的队列实现过程。对于森林遍历,阐述了先序遍历等同于依次对各树进行先根遍历,中序遍历等同于后根遍历,并说明它们分别对应二叉树的先序和中序遍历。文章最后总结了这些遍历方法的重要考点,并附有伪代码实现和图示说明。
一.树的遍历
1.树的先根遍历(深度优先遍历)
1.定义以及遍历过程
- 若树非空,先访问根结点,再依次对每棵子树进行先根遍历。
- 例如,对途中树执行先根遍历的过程为:
第一步 | A | B | C | D | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
第二步 | A | (B | E | F) | (C | G) | (D | H | I | J) | |
第三步 | A | (B | (E | K) | F) | (C | G) | (D | H | I | J) |
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.森林的先序遍历
1.定义与遍历过程
-
先序遍历森林。
若森林为非空,则按如下规则进行遍历:
访问森林中第一棵树的根结点。
先序遍历第一棵树中根结点的子树森林。
先序遍历除去第一棵树之后剩余的树构成的森林。 -
上图所示森林的先序遍历过程为
-
其效果等同于依次对各个树进行先根遍历
2.森林的先序遍历与二叉树的先序遍历的关系
-
把上图的森林转化为二叉树为:
-
可以发现:森林的先序遍历等同于依次对二叉树的先序遍历
2.森林的中序遍历
1.定义与遍历过程
-
中序遍历森林
若森林为非空,则按如下规则进行遍历:
中序遍历森林中第一棵树的根结点的子树森林。
访问第一棵树的根结点。
中序遍历除去第一棵树之后剩余的树构成的森林。 -
上图所示森林的中序遍历过程为
-
效果等同于依次对各个树进行后根遍历
2.森林的中序遍历与二叉树的中序遍历的关系
-
把上图的森林转化为二叉树为:
-
可以发现:森林的中序遍历等同于依次对二叉树的中序遍历
三.知识回顾与重要考点
结语
最近因为写二叉树的作业耽搁了更新,因为二叉树实在太难了,我花了很多时间去理解透彻,现在终于有时间更新了,没记错我应该是欠了4章了,现在补第一章😖
如想观看更多章节笔记,请点击 一、数据结构专栏导航页