408真题解析-2010-6-数据结构-哈夫曼树

408真题解析-2010-6-数据结构-哈夫曼树

一 真题2010-6

2010-06. 对 nnn( n≥2n≥2n≥2 )个权值均不相同的字符构造哈夫曼树。下列关于该哈夫曼树的叙述中,错误的是( )。

A. 该树一定是一棵完全二叉树

B. 树中一定没有度为 1 的结点

C. 树中两个权值最小的结点一定是兄弟结点

D. 树中任一非叶结点的权值一定不小于下一层任一结点的权值

二 题目要素解析

核心概念哈夫曼树(Huffman Tree)

  • 定义:带权路径长度(WPL)最小的二叉树,也称最优二叉树。
  • 构造规则:每次从森林中选取两个权值最小的节点,合并为一个新节点(新节点权值为两者之和),新节点作为它们的父节点。

结构特征

  • 哈夫曼树中只有度为 0(叶子)和度为 2(非叶)的节点。
  • 包含 n 个叶子节点的哈夫曼树,其总结点数为 2n−1。

选项分析目标:找出不符合哈夫曼树性质的描述。

三 哔哔详解

Step 1:回顾哈夫曼树的构造规则

  1. 将每个字符视为一棵只有根节点的二叉树,权值为字符频率。

  2. 每次从森林中选出

    两棵根节点权值最小的树

    ,合并为一棵新树:

    • 新树的根权值 = 两子树权值之和
    • 两子树分别作为新树的左右孩子
  3. 重复直到只剩一棵树 → 即哈夫曼树。

✅ 关键特性:

  • 每次合并两个节点 → 所有内部节点都有两个孩子
  • 因此,不存在度为 1 的节点

Step 2:逐项分析选项

A. 该树一定是一棵完全二叉树 ❌(错误)

  • 完全二叉树定义:除最后一层外,其他层全满;最后一层节点靠左排列。

  • 哈夫曼树 ≠ 完全二叉树

  • 反例

    :设权值为 {1, 2, 3, 4}

    • 合并 1+2=3 → 新森林:{3, 3, 4}

    • 合并 3+3=6 → 新森林:{4, 6}

    • 合并 4+6=10

    • 最终树结构:

      复制代码
        10
       /  \
      6    4

      /
      3 3
      /
      1 2

或等价结构,但不可能是完全二叉树(如第3层只有3个节点,且分布不对称)。

A 错误,是本题答案


B. 树中一定没有度为 1 的结点 ✅(正确)
  • 哈夫曼树由两两合并生成
  • 每个内部节点都是由两个子树合并而来 → 必有两个孩子
  • 叶子节点度为 0
  • 所以不存在度为 1 的节点

→ B 正确


C. 树中两个权值最小的结点一定是兄弟结点 ✅(正确)
  • 由于权值互不相同,最小的两个权值在第一步就被选中合并
  • 合并后成为同一父节点的左右孩子 → 互为兄弟
  • 即使后续被更高层合并,它们的父子关系不变

→ C 正确

📌 注意:若权值可重复,则可能不是兄弟,但本题明确"权值均不相同"


D. 树中任一非叶结点的权值一定不小于下一层任一结点的权值 ✅(正确)
  • 非叶节点的权值 = 其子树中所有叶子权值之和
  • 子树中任意节点(包括下一层的内部节点或叶子)的权值 ≤ 该子树总权值
  • 因为所有权值 > 0,所以:

父节点权值=左子权值+右子权值≥max⁡(左子权值,右子权值)父节点权值=左子权值+右子权值≥max(左子权值,右子权值)

  • 故非叶节点权值 ≥ 其直接子节点权值
  • 递推可知:非叶节点权值 ≥ 下一层任意节点权值

→ D 正确


四 参考答案

参考答案 A

五 考点精析

5.1 哈夫曼树定义及基本特征

1. 定义

  • 哈夫曼树 (最优二叉树):给定 nn 个带权叶子节点,构造一棵二叉树,使其 带权路径长度(WPL)最小

  • 带权路径长度(WPL)

    WPL=∑i=1nwi⋅li\text{WPL} = \sum_{i=1}^{n} w_i \cdot l_iWPL=i=1∑nwi⋅li

  • wiw_iwi:第 iii 个叶子的权值(如字符频率)

  • lil_ili :该叶子到根的路径长度 (通常指边数

✅ 目标:高频字符路径短 → 编码短 → 压缩效率高


二、核心性质特征

性质 说明
1. 无度为 1 的节点 所有内部节点均由两个子树合并而成 → 度为 2
2. 叶子数 = n ,总节点数 = 2n−1 n 个叶子 + (n−1) 个内部节点
3. 最小两个权值必为兄弟(权值互异时) 构造第一步即合并它们
4. 非叶节点权值 ≥ 子节点权值 因其权值 = 子树权值之和
5. 不一定是完全/满二叉树 结构由权值分布决定,可能高度不平衡
6. WPL 唯一,但树结构可能不唯一 当有权值相同时,合并顺序可不同

5.2 WPL 计算

方法 1:按叶子计算(定义法)

WPL=∑(叶子权值×深度) \text{WPL} = \sum (\text{叶子权值} \times \text{深度}) WPL=∑(叶子权值×深度)

深度 = 从根到该叶子的边数

方法 2:按内部节点累加(推荐!)

  • 每次合并的代价 = 两子树权值之和
  • WPL = 所有合并操作的代价之和
✅ 示例:

权值:{1, 2, 3, 4}

  1. 合并 1+2 = 3 → 代价 3
  2. 合并 3+3 = 6 → 代价 6
  3. 合并 4+6 = 10 → 代价 10
    WPL = 3 + 6 + 10 = 19

💡 此法无需画树,直接累加中间结果,408 快速解题首选


5.3 哈夫曼树构造步骤(贪心算法)

5.3.1 口诀

  1. 构造森林全是根;
  2. 选用两小造新树;
  3. 删除两小添新人;
  4. 重复2、3剩单根。

5.3.2 详细步骤

初始化:将 n 个权值分别作为 n 棵只有根节点的二叉树(森林)。

选最小 :在森林中选取两棵根节点权值最小的树。

合并:将这两棵树合并为一棵新树。

  • 新树根节点的权值 = 两棵子树根节点权值之和。
  • 谁权值小谁作为左子树(习惯做法,也可反之,但需保持一致),权值大的作为右子树。

更新:在森林中删除这两棵旧树,加入这棵新树。

循环:重复步骤 2-4,直到森林中只剩下一棵树为止。这棵树就是哈夫曼树。


5.4 哈夫曼编码

  1. 前缀编码:没有任何一个编码是另一个编码的前缀(保证解码时不会产生歧义)。
  2. 编码规则:
    • 规定哈夫曼树中,左分支代表 '0',右分支代表 '1'(也可以反过来,但必须统一)。
    • 从根节点出发,到某一叶子节点的路径上的 0/1 序列,即为该叶子节点的哈夫曼编码。
  3. 特点:
    • 哈夫曼编码是前缀编码
    • 哈夫曼编码是最优前缀编码(平均编码长度最短)。

✅ 示例(权值 {1:a, 2:b, 3:c, 4:d}):

复制代码
        (10)
       /    \
     (6)     d(4)
    /   \
  c(3)  (3)
       /   \
     a(1) b(2)
  • a: 010
  • b: 011
  • c: 00
  • d: 1

平均码长=1×3+2×3+3×2+4×11+2+3+4=1910=1.9\text{平均码长} = \frac{1 \times 3 + 2 \times 3 + 3 \times 2 + 4 \times 1}{1 + 2 + 3 + 4} = \frac{19}{10} = 1.9平均码长=1+2+3+41×3+2×3+3×2+4×1=1019=1.9

说明

  • 分子:各字符权值 × 编码长度(即路径长度)之和 → 等于 WPL
  • 分母:所有字符权值之和(即总频率)
  • 平均码长 = WPL / 总权值

六 考点跟踪

年份 题号 考查内容 CSDN 参考链接 VX参考链接
2010 第6题 哈弗曼树基本特征
2015 第3题 根据结点权值判断是否为哈夫曼树
2021 第5题 最小带权路径长度

说明 :本文内容基于公开资料整理,参考了包括但不限于《数据结构》(严蔚敏)、《计算机操作系统》(汤小丹)、《计算机网络》(谢希仁)、《计算机组成原理》(唐朔飞)等国内高校经典教材,以及其他国际权威著作。同时,借鉴了王道、天勤、启航等机构出版的计算机专业考研辅导系列丛书 中的知识体系框架与典型题型分析思路。文中所有观点、例题解析及文字表述均为作者结合自身理解进行的归纳与重述,未直接复制任何出版物原文。内容仅用于学习交流,若有引用不当或疏漏之处,敬请指正。

相关推荐
tobias.b3 小时前
408真题解析-2010-7-数据结构-无向连通图
数据结构·算法·图论·计算机考研·408真题解析
漫随流水4 小时前
leetcode回溯算法(93.复原IP地址)
数据结构·算法·leetcode·回溯算法
艾莉丝努力练剑4 小时前
【优选算法必刷100题】第021~22题(二分查找算法):山脉数组的峰顶索引、寻找峰值
数据结构·c++·算法·leetcode·stl
血小板要健康6 小时前
如何计算时间复杂度(上)
java·数据结构·算法
wWYy.7 小时前
详解哈希表
数据结构·算法·散列表
WK100%7 小时前
二叉树经典OJ题
c语言·数据结构·经验分享·笔记·链表
jiaguangqingpanda8 小时前
Day29-20260125
java·数据结构·算法
历程里程碑8 小时前
Linux 5 目录权限与粘滞位详解
linux·运维·服务器·数据结构·python·算法·tornado
毅炼9 小时前
Netty 常见问题总结
java·网络·数据结构·算法·哈希算法