Appearance
题目
已知森林 及与之对应的二叉树 ,若 的先根遍历序列是 ,中根遍历序列是 ,则 的后序遍历序列是( )。
错因
A
直接把森林 的中根序列当成了 的后序。原因是错记了"森林后根 ↔ 二叉树后序"——但其实是 森林后根 ↔ 二叉树中序。这个对应表的方向最容易记混。
B
构造二叉树 时把节点关系挂错了:把 、 当成 的子树,而不是 的右子树后代。这样得到的 是 ,其中序是 ,与题目给的中序 不符——一旦构造前不验证中序,就会得到 B。
D
误以为"后序就是先序的逆序"。这只在对称结构(每个非空子树都只有一个孩子,且整棵树退化成单链)时偶尔巧合成立,本题 不是这种结构。直接把 反过来写就掉进了这个陷阱。
总解析
第一步:先把森林遍历翻译成二叉树遍历。
森林与对应二叉树的遍历对应表(必须背熟):
| 森林 | 二叉树 |
|---|---|
| 先根遍历 | 先序遍历 |
| 中根遍历 | 中序遍历 |
| 后根遍历 | 中序遍历(同上) |
注意:森林的"中根"和"后根"都对应二叉树的中序——不要错记成对应"后序"。
所以已知:
- 的先序:
- 的中序:
第二步:由先序+中序构造 。
| 子问题 | 先序段 | 中序段 | 根 | 左子树中序 | 右子树中序 |
|---|---|---|---|---|---|
| 整棵 | |||||
| 的右子树 | (空) | ||||
| 的左子树 | (空) | ||||
| 的右子树 | (空) |
构造出的 :
第三步:对 做后序遍历(左 → 右 → 根)。
按子树自底向上输出:
- 的左子树:
- 的右子树( 子树)的后序:
- 的左子树( 子树)的后序:
- 的左子树:空
- 的右子树( 子树)的后序:
- 输出 :
- 的右子树:空
- 输出 :
- 的左子树( 子树)的后序:
- 输出 :
最终答案是 C(b, f, e, d, c, a)。
这类题的标准流程一定是 "先翻译遍历对应关系 → 再用先序+中序构造 → 最后做 的后序"。每一步都验证一下中序与题目给的是否相符,可以把错构造(如选项 B 那种)排除掉。