文章结构:基本思路 + 代码实现
-
基本思路:
在根结点到叶子结点的路径上,从叶子结点开始依次逆向判断每个结点是左还是右孩子,根据判断结果将编码存储到数组中,直到当前结点没有双亲结点——即根结点。 -
代码实现:
1)哈夫曼编码类型声明:
typedef struct
{
int code[MaxSize];
int start;
}HFCode;
2)实现算法:
void create_huffmancode(HFTree hft[], HFCode hfc[], int n0)
{
int i, chd, prt;
HFCode cd;
for(i=0; i<n0; i++){
chd = i;
prt = hft[i].parent;
//哈夫曼树最长叶子编码位数为叶子数-1
cd->start = n0-1;
cd->code[cd->satrt+1] = '\0';
while(prt != -1){
if(chd == hft[i].lchild)
cd->code[cd->start++] = 0;
else
cd->code[cd->start++] = 1;
chd = prt;
prt = hft[prt].parent;
}
cd->start++;
hfc[i] = cd;
}
}