数据结构历年考研真题对应知识点(树、森林)

目录

5.4.2树、森林与二叉树的转换

1.树转换为二叉树

【树和二叉树的转换及相关性质的推理(2009、2011)】

2.森林转换为二叉树

【森林和二叉树的转换及相关性质的推理(2014)】

3.二叉树转换为森林

【由遍历序列构造一棵二叉树并转换为对应的森林(2020、2021)】

5.4.3树和森林的遍历

1.树的遍历

【树与二叉树遍历方法的对应关系(2019)】

2.森林的遍历

【森林与二叉树遍历方法的对应关系(2020)】


5.4.2树、森林与二叉树的转换

1.树转换为二叉树

【树和二叉树的转换及相关性质的推理(2009、2011)】

树转换为二叉树的规则:每个结点的左指针指向它的第一个孩子,右指针指向它在树中的相邻右兄弟,这个规则又称"左孩子右兄弟"。由于根结点没有兄弟,因此树转换得到的二叉树没有右子树,如图 5.23 所示。

树转换为二叉树的画法:

  1. 在兄弟结点之间加一连线;

  2. 对每个结点,只保留它与第一个孩子的连线,而与其他孩子的连线全部抹掉:

  3. 以树根为轴心,顺时针旋转 45°。

2.森林转换为二叉树

【森林和二叉树的转换及相关性质的推理(2014)】

将森林转换为二叉树的规则与树类似。先将森林中的每棵树转换为二叉树,由于任意一棵树对应的二叉树的右子树必空,若把森林中第二棵树根视为第一棵树根的右兄弟,即将第二棵树对应的二叉树当作第一棵二叉树根的右子树,将第三棵树对应的二叉树当作第二棵二叉树根的右子树,以此类推,就可以将森林转换为二叉树。

森林转换为二叉树的画法:

  1. 将森林中的每棵树转换成相应的二叉树;

  2. 每棵树的根也可视为兄弟关系,在每棵树的根之间加一根连线:

  3. 以第一棵树的根为轴心顺时针旋转 45°。

3.二叉树转换为森林

【由遍历序列构造一棵二叉树并转换为对应的森林(2020、2021)】

二叉树转换为森林的规则:

若二叉树非空,则二叉树的根及其左子树为第一棵树的二叉树形式,所以将根的右链断开。

二叉树根的右子树又可视为一个由除第一棵树外的森林转换后的二叉树,应用同样的方法,直到最后只剩一棵没有右子树的二叉树为止,最后将每棵二叉树依次转换成树,就得到了原森林,如图5.24所示。二叉树转换为树或森林是唯一的。

5.4.3树和森林的遍历

1.树的遍历

【树与二叉树遍历方法的对应关系(2019)】

树的遍历是指用某种方式访问树中的每个结点,且仅访问一次。主要有两种方式:

  1. 先根遍历。若树非空,则按如下规则遍历:
  • 先访问根结点。
  • 再依次遍历根结点的每棵子树,遍历子树时仍遵循先根后子树的规则

其遍历序列与这棵树相应二叉树的先序序列相同。

  1. 后根遍历。若树非空,则按如下规则遍历:
  • 先依次遍历根结点的每棵子树,遍历子树时仍遵循先子树后根的规则。
  • 再访问根结点。

其遍历序列与这棵树相应二叉树的中序序列相同。

图5.23 的树的先根遍历序列为ABEFCDG,后根遍历序列为 EFBCGDA。

另外,树也有层次遍历,与二叉树的层次遍历思想基本相同,即按层序依次访问各结点。

2.森林的遍历

按照森林和树相互递归的定义,可得到森林的两种遍历方法。

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

图5.24的森林的先序遍历序列为ABCDEFGHI,中序遍历序列为 BCDAFEHIG。

【森林与二叉树遍历方法的对应关系(2020)】

当森林转换成二叉树时,其第一棵树的子树森林转换成左子树,剩余树的森林转换成右子树,可知森林的先序和中序遍历即为其对应二叉树的先序和中序遍历。

树和森林的遍历与二叉树的遍历关系见表。

|------|------|------|
| 树 | 森林 | 二叉树 |
| 先根遍历 | 先序遍历 | 先序遍历 |
| 后根遍历 | 中序遍历 | 中序遍历 |

注意:部分教材也将森林的中序遍历称为后序遍历,称中序遍历是相对其二叉树而言的,称后序遍历是因为根确实是最后才访问的,若遇到这两种称谓,则可理解为同一种遍历方法。

相关推荐
2601_96221861几秒前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
吞下星星的少年·-·10 分钟前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime1 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
和裕3 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技3 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu1234 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl4 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王5 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218615 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
那年窗外下的雪.6 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法