应用

二叉搜索树(BST)

左子树 < 根 < 右子树。查找、插入、删除平均 O(logn)O(\log n)。中序遍历 BST 得到有序序列。

平衡二叉树(AVL)

任意结点左右子树高度差(平衡因子)不超过 1。插入、删除后通过旋转(LL、RR、LR、RL)恢复平衡,保证 O(logn)O(\log n) 的查找效率。

哈夫曼树与哈夫曼编码

  • 哈夫曼树(最优二叉树):带权路径长度(WPL)最小的二叉树
  • 构造方法:每次选权值最小的两个结点合并,直到只剩一棵树
  • 哈夫曼编码:左分支 0、右分支 1,用于数据压缩(前缀编码,无歧义)

习题

习题 1

(2023 年 408 真题) 在由 6 个字符组成的字符集 S 中,各字符出现的频次分别为 3, 4, 5, 6, 8, 10,为 S 构造的哈夫曼编码的加权平均长度为( )。

A. 2.4 B. 2.5 C. 2.67 D. 2.75

答案与解析

答案

B

解析

构造哈夫曼树的过程如下:

  1. 将频次从小到大排序:3, 4, 5, 6, 8, 10。
  2. 选取最小的两个频次 3 和 4,合并成新节点,权值为 7。
  3. 剩余频次为 5, 6, 7, 8, 10。选取最小的两个 5 和 6,合并成新节点,权值为 11。
  4. 剩余频次为 7, 8, 10, 11。选取最小的两个 7 和 8,合并成新节点,权值为 15。
  5. 剩余频次为 10, 11, 15。选取最小的两个 10 和 11,合并成新节点,权值为 21。
  6. 剩余频次为 15, 21。合并成根节点,权值为 36。

计算加权路径长度 (WPL):

  • 频次为 10 的字符编码长度为 2。
  • 频次为 8 的字符编码长度为 2。
  • 频次为 6 的字符编码长度为 3。
  • 频次为 5 的字符编码长度为 3。
  • 频次为 4 的字符编码长度为 3。
  • 频次为 3 的字符编码长度为 3。

WPL = (10 × 2) + (8 × 2) + (6 × 3) + (5 × 3) + (4 × 3) + (3 × 3) = 20 + 16 + 18 + 15 + 12 + 9 = 90

加权平均长度 = WPL / 总频次 = 90 / (3+4+5+6+8+10) = 90 / 36 = 2.5

习题 2

哈夫曼树的主要应用是什么?

答案与解析

哈夫曼树的主要应用是哈夫曼编码(最优前缀编码),用于数据压缩。出现频率高的字符用短编码,频率低的用长编码,使总编码长度最短。由于任何字符的编码都不是其他字符编码的前缀,解码无歧义。此外还可用于构造最优判定树。