4.3.1 树向二叉树的转换
核心规则:左孩子右兄弟
转换方法:
- 连兄弟线:在树中将所有兄弟节点用水平线连接。
- 保留最左孩子:每个节点仅保留与最左孩子(长子)的连线,其余子节点连线删除。
- 旋转调整:以根为轴心顺时针旋转45°,形成二叉树结构。
示例(图4.8示意):
- 原树结构:
A ├─B │ ├─E │ └─F ├─C └─D
- 转换后二叉树:
A └─B ├─E │ └─F └─C └─D
- 说明:
- 节点B的左子树为长子E,右子树为兄弟C;
- 节点C的右子树为兄弟D;
- 节点E的右子树为兄弟F。
4.3.2 森林向二叉树的转换
核心规则:森林中每棵树转为二叉树后,按顺序链接为右子树链。
转换步骤:
- 单棵树转换:将森林中的每棵树分别转换为二叉树(方法同4.3.1)。
- 右子树链接:从最后一棵树开始,将其作为前一棵树的右子树。
示例(图4.9示意):
- 原森林:
森林 = [Tree1, Tree2, Tree3] Tree1: A / | \ B C D Tree2: E \ F Tree3: G
- 转换过程:
- 每棵树转为二叉树:
- Tree1的二叉树:
A(B, C(, D))
- Tree2的二叉树:
E(, F)
- Tree3的二叉树:
G
- Tree1的二叉树:
- 链接为右子树链:
A ├─B └─C ├─D └─E └─F └─G
- 说明:
- Tree1的根节点A的右子树为Tree2的根E;
- Tree2的根E的右子树为Tree3的根G。
示意图说明(文字描述)
树转二叉树:
兄弟节点转为右子树,长子转为左子树。
原树的层次关系通过左子树深度和右子树宽度体现。
森林转二叉树:
森林中多棵树按顺序形成右子树链,每棵树内部遵循左孩子右兄弟规则。
公式补充:
对于树中节点$N$,其转换后的二叉树节点$N'$满足:
- $N'.left = \text{N的第一个孩子}$
- $N'.right = \text{N的下一个兄弟}$
通过这种方式,树和森林的结构得以在二叉树中高效存储和操作。