Skip to content

2010年 408 数据结构 第 3 题

数据结构2010年选择题2分

题目

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

2010 真题第 3 题:四棵线索二叉树 A/B/C/D

结构(文字版):四个选项使用同一棵二叉树(节点皆为空圆,题面仅用字母标记 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

最后更新:

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

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