Skip to content

2015年 408 数据结构 第 3 题

数据结构2015年选择题2分

题目

下列选项给出的是从根分别到达两个叶结点路径上的权值序列,能属于同一棵哈夫曼树的是( )。

错因

A

只看到两条路径上的"24, 10"开头一致,就当成两条路径共用根 24 → 子 10 这条边。但要进一步检查 10 的孩子:第一条要求 10 的某个孩子是 5,则另一孩子 = ;第二条要求 10 的某个孩子是 7,则另一孩子 = 。同一个 10 节点不可能既有孩子 (5,5) 又有孩子 (7,3)。矛盾

B

24 = 10 + 14(这是 24 唯一可能的孩子组合,要让另一边能下接合法路径)。第一条路径的 24 → 10 没问题;第二条路径出现了 24 → 12,意味着 24 的某个孩子是 12 而不是 10/14——同一个 24 节点的两个孩子是固定的,不可能同时出现 "10" 和 "12"。 也直接说不通。

C

24 = 10 + 14 ✓。但第一条路径 10 → 10 要求 10 的某个孩子是 10,则另一个孩子 = 哈夫曼树的叶子(原始字符)权值都是正数,构造过程中产生的内部节点权值也是正数和,不可能出现 0。所以"父=子"在哈夫曼树里不成立——一旦出现,"另一孩子=0"就违法。

总解析

哈夫曼树的两条铁律

  1. 每个内部节点的权值 = 其两个孩子节点权值之和(构造时合并最小两棵子树得到)。
  2. 所有节点权值都是正数(叶子是原始字符权,内部是正数和)。

任意一条 "根 → 叶" 路径上的权值序列,相邻两个数 (父 , 子 ) 必须满足:父节点的另一个孩子权值

逐项检验

选项关键检查点结果
A两路径都是 24 → 10。同一个 10 节点的另一孩子 = (路径 1 推),又 = (路径 2 推),冲突
B24 的孩子既要是 10 又要是 12,但 ,且任一节点只有 2 个孩子
C24 → 10 → 10:10 的另一孩子 = ,违反"权值为正"
D24 → 10 → 5:10 的另一孩子 = 5(5+5=10 ✓),24 的另一孩子 = 14;24 → 14 → 6:14 的另一孩子 = 8(6+8=14 ✓)。全部自洽

D 对应的合法子结构(仅画出题目涉及的两条路径相关部分,节点数字为权值):

2410551468

解题套路:拿到选项后从根权值出发,每往下走一层就用 "父−子=另一子" 推出兄弟权值。一旦出现 ≤ 0、或两条路径推出的同一节点孩子矛盾,就排除。这类题不需要构造完整哈夫曼树,只校验局部约束就够了。

最终答案是 D(24, 10, 5 和 24, 14, 6)

最后更新:

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

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