
?构造完成后HT数组的状态如下:

通过huffman树,得到每一个叶子结点的huffman编码。在此采用的从叶子结点到根结点求每个字符huffman编码方法。从叶子c开始,通过结点c的双亲结点域,找到双亲,然后判断双亲结点的左孩子和右孩子是否为c,如果是左孩子,则编码为0,如果是右孩子则编码为1。按照这个方法,直到根结点,即求出每个叶子结点对应的huffman编码。
?

另外在构造huffman树中使用了Select函数实现选取n个叶子结点中权重最小的2个结点,算法很巧妙,请大家仔细研究:

主函数:
?

?