Appearance
题目
若一棵二叉树的前序遍历序列为 a, e, b, d, c,后序遍历序列为 b, c, d, e, a,则根结点的孩子结点( )。
错因
B
误以为根 a 有两个孩子 e 和 b。判断方法弄反了:前序去根后是 e, b, d, c,前序首 e 是 a 的某个孩子——但选 B 的人可能直接把 e 和 b 都当成 a 的直接孩子,没意识到 b 实际是 e 子树里的节点。
C
类似 B 的错误。把后序的某个节点(如 c)误当成 a 的孩子。其实后序末尾是根 a,倒数第二个 e 才是 a 的某子树根;c 在后序更靠前,在某更深层子树里。
D
完全否定可解性。事实上"前序 + 后序不能唯一确定二叉树"的局限在于单孩子节点的左右无法区分,但"根有几个孩子、是哪个节点"这个层级的信息是可以确定的。直接给 D 等于放弃分析。
总解析
关键性质:前序遍历是 NLR(根→左→右),后序遍历是 LRN(左→右→根)。
- 前序首 = 根 → 题目里前序首
a是根 ✓ - 后序末 = 根 → 题目里后序末
a也是根 ✓
判断 a 有几个孩子:
去掉根 a 后,剩余节点要么全在左子树,要么全在右子树("a 只有一个孩子"),要么分成两段("a 有两个孩子"):
- 前序去根:
e, b, d, c - 后序去根:
b, c, d, e
如果 a 有左右两个子树:
- 左子树前序首 = 左子树根 =
- 右子树后序末 = 右子树根 =
- (因为是两棵不同子树的根)
但本题里前序首是 e、后序末也是 e——根的孩子前序首 = 后序末 = e,所以 a 只有一个孩子,就是 e。其余 b, d, c 全是 e 子树里的节点。
进一步分析
e的子树(前序e,b,d,c+ 后序b,c,d,e):去e后前首b≠ 后末d,说明e有两个孩子(b是左子树根,d是右子树根)。但a → e这条边到底是左还是右?前序+后序无法分辨单孩子的左右,这就是这两种遍历组合不能唯一重建二叉树的根源。
最终答案是 A(根 a 只有一个孩子 e)。