1.数据结构设计
Huffman树中没有度为1的节点。n0=n2+1;
1棵树有n个叶子节点的Huffman树共有2n-1个节点,故可存储在大小为2n-1的一位数组中。
原因:
求编码需要从叶子节点出发走一条从叶子到根的路径。
Weight | Parent | Lchild | Rchild |
权值 | 双亲节点下标 | 左 | 右 |
译码需从根节点出发走一条到叶子结点的路径。
2.结构定义
typedef struct htnode
{
unsigned int Weight;
unsigned int Parent,Lchild,Rchild;
}HTNode;
3.Huffmand的生成
//Huffmand的生成
void Create_Huffman(unsigned n,HTNode HT[],unsigned m){
/*创建一颗叶子结点树为n的Huffman树*/
unsigned int w;int k,j;
for(k=1;k<m;k++){
if(k<=n){
cout<<"\nPlease Input Weight :w=?";
cin>>w;
HT[k].Weight=w;
}/*输入时,所有叶子结点都有权值*/
else
HT[k].Weight&