问答题
[说明]
(1)对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d)及其权值2、7、4、5,可构造如图3-26所示的最优二叉树,以及相应的结构数组Ht(如表3-12所示,其中数组元素Ht[0]不用)。
|
表3-12 结构数组Ht
|
数组下标 |
ch |
weight |
parent |
lchild |
rchild |
|
1 |
a |
2 |
5 |
0 |
0 |
|
2 |
b |
7 |
7 |
0 |
0 |
|
3 |
c |
4 |
5 |
0 |
0 |
|
4 |
d |
5 |
6 |
0 |
0 |
|
5 |
|
6 |
6 |
1 |
3 |
|
6 |
|
18 |
0 |
2 |
6 |
|
7 |
|
|
|
|
|
|
结构数组Ht的类型定义如下:

(2)用“0”或“1”标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用“0”(或“1”)标识该分支(示例见图3-26)。

(3)若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序将相应标识依次排列,可得到由“0”、“1”组成的一个序列,称此序列为该叶子结点的前缀编码。例如图3-26所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。
[函数说明1]
函数void LeafCode (int root,int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中,形参root为最优二叉树的根结点下标;形参n为叶子结点个数。
在函数void LeafCode (int root,int n)构造过程中,将Ht[p].weight域用做被遍历结点的遍历状态标志。
[函数4.1]

[函数说明2]
函数void Decode (char (作图)buff,int root)的功能是:将前缀编码序列翻译成叶子结点的字符序列,并输出。其中,形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。
[函数4.2]
【参考答案】
这是一道要求读者在用哈夫曼算法构造的最优二叉树上进行编码和译码的程序设计题。本题的解答思路如下。 哈夫曼算法构造最优二叉......
(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)