树、森林与二叉树之间可以相互转换,转换的核心是孩子兄弟表示法(又称二叉链表表示法)。
原始树:
A
/ | \
B C D
/ \
E F
步骤 1:加兄弟连线
A
/ | \
B--C--D
/ \
E---F
步骤 2:只保留与第一个孩子的连线
A
/
B---C---D
/
E---F
步骤 3:旋转整理,得到二叉树
A
/
B
/ \
E C
\ \
F D
| 原树中的关系 | 二叉树中的位置 |
|---|---|
| A 的第一个孩子是 B | A 的左孩子是 B |
| B 的下一个兄弟是 C | B 的右孩子是 C |
| C 的下一个兄弟是 D | C 的右孩子是 D |
| B 的第一个孩子是 E | B 的左孩子是 E |
| E 的下一个兄弟是 F | E 的右孩子是 F |
原始二叉树:
A
/
B
/ \
E C
\ \
F D
还原过程:
结果:
A
/ | \
B C D
/ \
E F
树1: A 树2: E 树3: G
/ \ / / \
B C F H I
/
D
步骤 1:各树分别转二叉树(左孩子右兄弟)
树1: 树2: 树3:
A E G
/ / /
B F H
/ \ \
D C I
步骤 2:合并 —— 后一棵树的根接为前一棵树根的右孩子
A
/ \
B E
/ \ \
D C G
/
H
\
I
完整的最终二叉树(含 F):
A
/ \
B E
/ \ / \
D C F G
/
H
\
I
| 树 / 森林的遍历 | 对应二叉树的遍历 |
|---|---|
| 先根遍历 | 先序遍历 |
| 后根遍历 | 中序遍历 |
| 层次遍历 | 层次遍历(仅形式对应,序列一般不同) |
| 方向 | 唯一性 |
|---|---|
| 树 → 二叉树 | 唯一 |
| 二叉树 → 树 | 唯一(前提:该二叉树的根无右孩子) |
| 森林 → 二叉树 | 唯一 |
| 二叉树 → 森林 | 唯一 |
森林先序 = 第一棵树的先根遍历 + 剩余森林的先序遍历
森林中序 = 第一棵树的后根遍历 + 剩余森林的中序遍历
(暂无关联知识点)
↑ 源笔记 front-matter 中 related 为空;本页右上「在 Obsidian 中打开」可跳回源笔记。