Back to Blog

已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是

上述算法的核心是 “根 → 左 → 右” 的递归划分。只要输入的中序和后序序列对应同一棵二叉树,恢复过程必然唯一。


3. 具体实例逐步推导

3.1 已知序列

  • 后序遍历D A B E C
  • 中序遍历D E B A C

(为方便阅读,已在序列之间加入空格,实际计算时请使用原始字符顺序。)

3.2 第一次划分:确定根节点

后序遍历就是:左右根,中序遍历就是:左根右。

  1. 后序遍历得 C 为根节点。

后序序列的最后一个字符 C 即为整棵树的根。

3.3 在中序序列中定位根

中序序列 DEBAC 中,C 位于最右端,左侧为 DEBA,右侧为空。因此:

  • 左子树的中序D E B A
  • 右子树的中序(空)
  1. 中序得 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
  1. 中序 DEBADE 的左子树,后序 DABBE 的下一个根节点,只能为 E 的右子树了。

此时我们已经确定:

  • E 的左子树只有一个节点 D(因为中序左侧只有 D,后序左侧也只有 D)。
  • E 的右子树的根是后序子序列 D A B 中的最后一个元素 B

3.5 第三次划分:B 的左右子树

B 的中序序列 B A,根 B 位于最左侧,左侧为空,右侧为 A

  • B 的左子树:空
  • B 的右子树:中序 A,后序也只剩 A,因此 AB 的唯一右子节点。

中序 BAAB 的右之树。

至此,整棵树的结构已经唯一确定,下面给出完整的 ASCII 图(保持原文不变):