Appearance
题目
下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是( )。

结构(文字版):四个选项使用同一棵二叉树(节点皆为空圆,题面仅用字母标记 a/b/c/d 用于区分)。
- 树形:a 为根,b 是 a 的左孩子,c 是 a 的右孩子,d 是 b 的左孩子(叶节点)
- 后序遍历序列:d → b → c → a
- 共有 5 个线索位——b 的右指针、c 的左/右指针、d 的左/右指针;四个选项的差异就在这 5 个线索的指向是否符合后序线索树定义,请对照图片自行判断
错因
A
d 的左线索指向 Null 是对的(d 是后序首节点,无前驱),但 d 的右线索指向了根节点 a,而非 d 的后序后继 b。后序序列是 d→b→c→a,d 的直接后继是 b,右线索必须指向 b。误选 A 的人可能把"后序最后节点(根)"和"后序后继"混淆了。
B
b 有左孩子 d,b 的左指针应该是实线(孩子指针),不应该存在左线索。B 把 b 的左孩子指针画成了 Null 线索,违反"有孩子用孩子指针、无孩子才用线索"的基本约定。
C
c 没有左孩子,c 的左线索应指向后序前驱 b(后序序列 …b, c, a,c 的前驱是 b);c 的右线索应指向后序后继 a(c 之后是 a)。C 中 c 的左线索方向不正确,不符合后序线索定义。
总解析
后序线索二叉树规则:
- 无左孩子的节点,左指针为线索 → 后序前驱(首节点则指向 Null)
- 无右孩子的节点,右指针为线索 → 后序后继(末节点即根则指向 Null)
- 有孩子的方向用实线(孩子指针),不加线索
本题后序序列:d → b → c → a
逐节点验证 D 的线索:
| 节点 | 有无左孩子 | 左线索/指针 | 有无右孩子 | 右线索/指针 |
|---|---|---|---|---|
| d | 无 | → Null(后序首节点,无前驱) | 无 | → b(后序后继) |
| b | 有(d) | → d(实线) | 无 | → c(后序后继) |
| c | 无 | → b(后序前驱) | 无 | → a(后序后继) |
| a | 有(b) | → b(实线) | 有(c) | → c(实线) |
D 的所有线索均正确;A、B、C 各有至少一处线索方向错误。
最终答案是 D。