Skip to content

2020年 408 数据结构 第 4 题

数据结构2020年选择题2分

题目

已知森林 及与之对应的二叉树 ,若 的先根遍历序列是 ,中根遍历序列是 ,则 的后序遍历序列是( )。

错因

A

直接把森林 的中根序列当成了 的后序。原因是错记了"森林后根 ↔ 二叉树后序"——但其实是 森林后根 ↔ 二叉树中序。这个对应表的方向最容易记混。

B

构造二叉树 时把节点关系挂错了:把 当成 的子树,而不是 的右子树后代。这样得到的 ,其中序是 ,与题目给的中序 不符——一旦构造前不验证中序,就会得到 B。

D

误以为"后序就是先序的逆序"。这只在对称结构(每个非空子树都只有一个孩子,且整棵树退化成单链)时偶尔巧合成立,本题 不是这种结构。直接把 反过来写就掉进了这个陷阱。

总解析

第一步:先把森林遍历翻译成二叉树遍历。

森林与对应二叉树的遍历对应表(必须背熟):

森林 二叉树
先根遍历先序遍历
中根遍历中序遍历
后根遍历中序遍历(同上)

注意:森林的"中根"和"后根"都对应二叉树的中序——不要错记成对应"后序"。

所以已知:

  • 的先序:
  • 的中序:

第二步:由先序+中序构造

子问题先序段中序段左子树中序右子树中序
整棵
的右子树(空)
的左子树(空)
的右子树(空)

构造出的

abcdef

第三步:对 做后序遍历(左 → 右 → 根)。

按子树自底向上输出:

  • 的左子树:
  • 的右子树( 子树)的后序:
    • 的左子树( 子树)的后序:
      • 的左子树:空
      • 的右子树( 子树)的后序:
      • 输出
    • 的右子树:空
    • 输出
  • 输出

最终答案是 C(b, f, e, d, c, a)

这类题的标准流程一定是 "先翻译遍历对应关系 → 再用先序+中序构造 → 最后做 的后序"。每一步都验证一下中序与题目给的是否相符,可以把错构造(如选项 B 那种)排除掉。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数