已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是
上述算法的核心是 “根 → 左 → 右” 的递归划分。只要输入的中序和后序序列对应同一棵二叉树,恢复过程必然唯一。
3. 具体实例逐步推导
3.1 已知序列
- 后序遍历:
D A B E C - 中序遍历:
D E B A C
(为方便阅读,已在序列之间加入空格,实际计算时请使用原始字符顺序。)
3.2 第一次划分:确定根节点
后序遍历就是:左右根,中序遍历就是:左根右。
- 后序遍历得
C为根节点。
后序序列的最后一个字符 C 即为整棵树的根。
3.3 在中序序列中定位根
中序序列 DEBAC 中,C 位于最右端,左侧为 DEBA,右侧为空。因此:
- 左子树的中序:
D E B A - 右子树的中序:
(空)
- 中序得
C无右子树,后序得C下一个根节点为E。
因为 C 没有右子树,后序序列中 C 前面的元素全部属于左子树。接下来我们在左子树的后序序列 D A B E 中继续寻找根节点。
3.4 第二次划分:左子树的根
后序子序列 D A B E 的最后一个元素是 E,于是 E 为左子树的根。
在左子树的中序序列 D E B A 中,E 位于第二个位置:
- 左子树的左子树(即
E的左子树)中序:D - 左子树的右子树(即
E的右子树)中序:B A
- 中序
DEBA得D为E的左子树,后序DAB得B为E的下一个根节点,只能为E的右子树了。
此时我们已经确定:
E的左子树只有一个节点D(因为中序左侧只有D,后序左侧也只有D)。E的右子树的根是后序子序列D A B中的最后一个元素B。
3.5 第三次划分:B 的左右子树
对 B 的中序序列 B A,根 B 位于最左侧,左侧为空,右侧为 A:
B的左子树:空B的右子树:中序A,后序也只剩A,因此A为B的唯一右子节点。
中序
BA得A为B的右之树。
至此,整棵树的结构已经唯一确定,下面给出完整的 ASCII 图(保持原文不变):