Skip to content

2023年 408 数据结构 第 5 题

数据结构2023年选择题2分

题目

已知一棵二叉树的树形如下图所示,若其后序遍历为 f, d, b, e, c, a,则其先序序列为( )。

124653

结构(文字版)(节点按层序由 1 到 6 编号;编号仅为表述方便,原题节点皆为空圆):根 1 的左孩子是 2、右孩子是 3(叶子);2 的左孩子是 4、右孩子是 5(叶子);4 没有左孩子,右孩子是 6(叶子)。

错因

B

把先序写成了"根 → 右 → 左"。题目里 a 是根(√),但接着先访问了右子树 c,再回到左子树。这是把先序和后序、或者把"先右"和"先左"搞反了——先序的标准是"根 → 左 → 右",不能调换顺序。

C

把先序当成"中序"或"后序"了。中序是"左 → 根 → 右",先访问最左的叶子。本题最左叶子是 f(树形里 6 号节点对应 f),但先序的第一个一定是,绝不可能是 f 或更深的节点。看到 c 在第一位且不是根,明显违反先序定义。

D

把先序写成了后序。题目已经给出后序是 f, d, b, e, c, a;选项 D 的字母组合"dfebac"看上去也像是某种自下而上的顺序,但和给定后序顺序不一致,实际上是把"左 → 右 → 根"和具体节点顺序又错搞了一次——常见于硬背遍历公式但没具体把节点对应清楚的情形。

总解析

第一步:用编号 + 后序对照,给空节点贴标签

按层序给节点编号(如题干 fence 所示):1 = 根、2 = 1 的左孩子、3 = 1 的右孩子、4 = 2 的左孩子、5 = 2 的右孩子、6 = 4 的右孩子。对这棵树做后序遍历得到:6, 4, 5, 2, 3, 1。

把它和题目给的后序 f, d, b, e, c, a 一一对应:

后序位置123456
编号645231
字母fdbeca

由此得到节点字母:1=a(根)、2=e、3=c、4=d、5=b、6=f。

第二步:在贴好标签的树上做先序遍历

aedfbc

先序"根 → 左 → 右":

  1. a
  2. 进入左子树(根 e):访问 e → 进入 e 的左子树(根 d):访问 d → 进入 d 的右子树(根 f,叶子):访问 f → 回到 e 的右孩子(叶子 b):访问 b
  3. 回到根的右孩子(叶子 c):访问 c

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

最后更新:

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

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