第13讲 哈夫曼树及其应用 课堂互动 隐藏答案 | 返回首页

作者:欧新宇(Xinyu OU)

最后更新:2023-11-7


【课前自测13】

1. 在有n个叶结点的哈夫曼树中,非叶结点的总数是()。
A. n - 1
B. n
C. 2n-1
D. 2n

答案及解析:A
由哈夫曼树的构造过程可知,哈天曼树中只存在度数为0和2的结点,因此它是二叉树是一棵扩充二叉树。根据非空二叉树的定义,其分支节点的度数=叶子结点度数+1,即 n2=n01n_2 = n_0 - 1

2. 给定整数集合 {3, 5, 6, 9, 12},与之对应的哈夫曼树是()。
🏷️Img_Lec1301

答案及解析:C
根据哈夫曼树构造方法,选取根节点权值最小的两棵树作为左右子树,可得如下过程:
1). 3和5构造为一棵子树,其根权值为8;
2). 新生成的8和6构造为一棵新子树,根权值为14;
3). 9与12构造为一棵子树,根权值为21;
4). 将两个新生成的根14和21进行合并成,并最终构成一棵哈夫曼树。
最终构成的哈夫曼树如图 🏷️Img_Lec1301Answer 所示,选项C正确。


3. 下列编码中,()不是前缀码。
A. {00, 01, 10, 11}
B. {0, 1, 00, 11}
C. {0, 10, 110, 1111}
D. {10, 110, 1110, 1111}

答案及解析:B
在编码中,若不存在任何一个编码是另外一个编码的前缀,则称这样的编码为前缀编码。在选项B中,0是00的前缀,1是11的前缀,因此选项B不是前缀编码。

4. 一棵哈夫曼树共有215个结点,对其进行哈夫曼编码,共能得到()个不同的码字。
A. 107
B. 108
C. 214
D. 215

答案及解析:B
根据非空二叉树结点间的数量关系可知,n分支=n叶子1n_{分支} = n_{叶子} - 1。因此,在包含215个结点的哈夫曼树中,总共有 (215+1)/2 = 108个叶子结点,也即可以得到108个编码。注意,对于哈夫曼树来说,因为只存在度数为0和2的结点,因此也可以直接使用公式 n0=n2+1n_0 = n_2 + 1 来进行结算。

【课堂互动13.1】哈夫曼树

1.【2021统考真题】若某二叉树有5个叶结点,其权值分别为10,12,16,21,30,则其最小的带权路径长度(WPL)是()。
A. 89
B. 200
C. 208
D. 289

答案及解析:B

  1. 根据权值,通过最小权重归并法构建哈夫曼树; 🏷️Img_Lec1302Answer
  2. 计算WPL:30×2 + 10×3 + 12×3 + 16×2 + 21×2 = 200。


2. 以下对于哈夫曼树的说法中,错误的是( )。
A. 对应一组权值构造出来的哈夫曼树一般不是唯一的
B. 哈夫曼树具有最小的带权路径长度
C. 哈夫曼树中没有度为1的结点
D. 哈夫曼树中除了度为1的结点,还有度为2的结点和叶结点

答案及解析:D
哈夫曼树通常是指带权路径长度最小的扩充二叉树(选项B)。因此,根据扩充二叉树的定义,哈夫曼树只有度数为0和2的结点,没有度数为1的结点(选项C)。因此,选项D是错误的。在哈夫曼树的构造过程中,每次都选举权值最小的两棵树的根(结点)作为左右子树,生成新的二叉树。此时,两颗子树的顺序没有限制;并且,如果存在多个相同、且具有最小权值的结点时,可以随意选择其中一个进行合并。因此,相同的结点也可以构造出不同的哈夫曼树(选项A)。

3. 若度为 m 的哈夫曼树中,叶结点个数为 n,则非叶结点的个数为()。
A. n - 1
B. n/m1\lfloor n/m - 1 \rfloor
C. (n1)/(m1)\lceil (n - 1)/(m - 1) \rceil
D. n/(m1)1\lceil n/(m - 1) - 1 \rceil

答案及解析:C
本题的关键是找到度数m和叶结点数 n0n_0 之间的数量关系。设该二叉树包含 nmn_m 个度数为m的结点,根据二叉哈夫曼树的结论,度数为m的结点个数+度数为0的结点个数=总结点个数N,即 N=n0+nmN = n_0 + n_m。此外,对于一棵树来说,分支数(边数) = 结点数-1,于是有 m×nm=N1m×n_m = N - 1。联立两个方程可得:nm=(n1)/(m1)n_m = (n-1)/(m-1)

4.【2010统考真题】 n(n≥2)个权值均不相同的字符构成哈夫曼树,关于该树的叙述中,错误的是()。
A. 该树一定是一棵完全二叉树
B. 树中一定没有度为1的结点
C. 树中两个权值最小的结点一定是兄弟结点
D. 树中任意一个非叶结点的权值一定不小于下一层任意一个结点的权值

答案及解析:A
哈夫曼树是一棵带权路径长度最小的扩展二叉树,因此它只包含度数为0和2的结点,没有度数为1的结点,但并不强制为完全二叉树。选项B正确,选项A错误。在构建哈夫曼树的时候,基本规则是通过归并权值最小的叶子结点来生成子树,因此任意非叶结点的权值都不小于下一层结点的权值,选项C、D正确。

5.【2015统考真题】下列选项给出的是从根分别到达两个叶结点路径上的权值序列,能属于同一棵哈夫曼树的是()。
A. 24,10,5和24,10,7
B. 24,10,5和24,12,7
C. 24,10,10和24,14,11
D. 24,10,5和24,14,6

答案及解析:D
在哈夫曼树中,左右孩子结点的权值之后必须等于父结点的权值。

【课堂互动13.2】哈夫曼编码

1. 设哈夫曼编码的长度不超过4,若已对两个字符编码为1和01,则最多还可以对( )个字符编码。
A. 2
B. 3
C. 4
D. 5

答案及解析:C
在哈夫曼编码中,一个编码不能是任何其他编码的前缀。因此,3位编码只能是000,001这两种可能。基于这两个编码,分别可以扩展出0001,0000,0010,0011这四种编码。本题要求获得最多的字符编码,因此,所有编码的长度都为4。所以,最多总共可以有4个字符编码。
在实际做题的过程中,我们可以先绘制出1和01两个编码的叶子结点,然后再去扩展除这两条分支外的其他分支,并根据题意选择不同长度的编码。

2. 【2014统考真题】 5个字符有如下4种编码方案,不是前缀编码的是()。
A. 01,0000,0001,001,1
B. 011,000,001,010,1
C. 000,001,010,011,100
D. 0,100,110,1110,1100

答案及解析:D
在编码中,若不存在任何一个编码是另外一个编码的前缀,则称这样的编码为前缀编码。选项D中,110是1100的前缀,所以选项D不是前缀编码。

3.【2022统考真题】对任意给定的含 n(n>2) 个字符的有限集S,用二叉树表示S的哈夫曼编码集和定长编码集,分别得到二叉树T1和T2。下列叙述中,正确的是( )。
A. T1与T2的结点数相同
B. T1的高度大于T2的高度
C. 出现频次不同的字符在T1中处于不同的层
D. 出现频次不同的字符在T2中处于相同的层

答案及解析:D
本题建议使用特例法来完成,给定图包含哈夫曼编码和等长编码的图如 🏷️Img_Lec1302Answer 所示。

4.【2017统考真题】已知字符集 {a, b, c, d, e, f, g, h},若各字符的哈夫曼编码依次是0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列 0100011001001011110101 的译码结果是()。
A. acgabfh
B. adbagbb
C. afbeagd
D. afeefgd

答案及解析:D
哈夫曼编码是前缀编码,各个编码的前缀不同,因此直接拿编码序列与哈夫曼编码一一比对,每获得一组相同的结果,则输出一个字符。本题最终译码结果为afeefgd。选项D正确。

5.【2018统考真题】已知字符集 {a,b,c,d,e,f},若各字符出现的次数分别为 6,3,8,2,10,4,则对应字符集中各字符的哈夫曼编码可能是()。
A. 00,1011,01,1010,11,100
B. 00,100,110,000,0010,01
C. 10,1011,11,0011,00,010
D. 0011,10,11,0010,01,000

答案及解析:A
构造一棵符合题意的哈夫曼树,可以采取归并法进行构造。但由于哈夫曼树并不是唯一的,因此对于选择题可以通过哈夫曼树的基本性质,使用排除法来确定答案。基本性质,包括1). 必须满足前缀编码,即任何编码都不能是其他编码的前缀;2). 权值越大的结点越靠近根结点,编码长度越短(或相等)。

6.【2019统考真题】对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有115个结点,则n的值是()。
A. 56
B. 57
C. 58
D. 60

答案及解析:C
n0n_0 个符号构建的哈夫曼编码,意味着包含 n0n_0 个叶子结点。根据扩充二叉树的性质 n0=n2+1,n=n0+n2n_0 = n_2 + 1, n = n_0 + n_2 可得,n0=(115+1)/2=58n_0 = (115+1)/2 = 58

【扩展练习13】

第13讲 哈夫曼树及其应用 课堂互动 隐藏答案 | 返回首页