02-第6章树与二叉树第11讲-树与二叉树的转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.4.2 森林与二叉树的转换
由于二叉树和树都可用二叉链表作为存储结构,则 以二叉链表作为媒介可导出树与二叉树之间的一 个 对应关系。
也就是说,给定一棵树,可以找到惟一的一棵二叉 树与之对应,从物理结构来看,它们的二叉链表是 相同的,只是解释不同而已。
A
B CD
EF
G
A
B
EC
F
D
G
A
B
E
C
F
A
A
BC D
EF
G
一棵树 A
B
E
C
F
D
G
相邻兄弟之间 加连线(虚线)
BC D
EF
G
删除与双亲 结点的连线
转换后的二叉树
A BC D
EF
G
当要转换为二叉树的森林由两棵或以上树构成时,将 这样的森林转换为二叉树的过程如下:
➢ 将森林中的每棵树转换成相应的二叉树。 ➢ 第一棵二叉树不动,从第二棵二叉树开始,依次把后
➢ 若某结点是其双亲的左孩子,则把该结点的右孩子、 右孩子的右孩子、…、都与该结点的双亲结点用连 线连起来。
➢ 删除原二叉树中所有双亲结点与右孩子结点之间的 连线。
➢ 整理由①、②两步所得到的树,使之结构层次分明。
【示例-3】 将下图的一棵二叉树还原为树。
A
A
A
B
E
C
加连线
B
E
C
删除与右孩 子的连线
D
G
6.4.2 森林与二叉树的转换
将一棵树转换成二叉树的过程如下: ➢ 树中所有相邻兄弟之间加一条连线; ➢ 对树中的每个结点,只保留它与第一个孩子结点
之间的连线,删除它与其他孩子结点之间的连线; ➢ 以树的根结点为轴心,将整棵树顺时针转动45度,
使之结构层次分明。
【示例-1】 将下图所示的树转换成二叉树。 解:转换的过程:
一棵二叉树的根结点作为前一棵二叉树根结点的右 孩 子结点,当所有二叉树连在一起后,此时所得到 的二 叉树就是由森林转换得到的二叉树。
【示例-2】 将下图所示的森林转换成二叉树。
G
A
C
H
I
B DEF
J
K
A
B
C
A
C
B
D
E
F
G H
J
I
K
D E
G H
FJ
I
K
6.4.3 二叉树还原为树/森林
当一棵二叉树是由一棵树转换而来的,则该二叉树还 原为树的过程如下:
B
E
C
F
D
F
D
F
D
G 一棵二叉树
G
G
A
B
CD
E
F
G
当一棵二叉树是由m棵树构成的森林转换而来的,该 二叉树的根结点一定有m-1个右下孩子,则该二叉树还 原为森林的过程如下:
➢ 抹掉二叉树根结点右链上所有结点之间的“双亲-右 孩子”关系,将其分成若干个以右链上的结点为根结 点的二叉树,设这些二叉树为bt1、bt2、…、btm。
➢ 分别将bt1、bt2、…、btm二叉树各自还原成一棵树。
【示例-4】 将如下图的二叉树还原为森林。
A
A
B C
E
F
G
D
H
I
一棵二叉树
B C D E
F G H
I
A
B C D E F G H I
A
H
I
3.
树的遍历
树的遍历运算是指按某种方式访问树中的每一 个 结点且每一个结点只被访问一次。
后根遍历的顶点访问次序: E F B C I J K H G DA
━━ END ━━
有以下两种遍历方法:
先根遍历 后根遍历
注意:先根和后根遍历算法都是递归的。
先根遍历: 若树不空,则先访问根结点,然后依次先根遍历各 棵子树。
后根遍历: 若树不空,则先依次后根遍历各棵子树,然后访问 根结点。
【示例-5】 遍历下图所示的树。
A
B
C
D
EF
G
H
IJ K
先根遍历的顶点访问次序: A B E F C D G H I JK
相关文档
最新文档