printf("一个字符不进行编码!\n");
exit(1);
}
//构造赫夫曼 HT,编码存放在 HC 中,w 为权值,n 为结点个数
HuffmanCode HuffmanCoding(HuffmanTree &HT,HuffmanCode HC,int *w,int n)
{
int i,s1=0,s2=0;
HuffmanTree p;
char *cd;
int f,c,start,m;
MinCode min;
if(n<=1)
{
Error();//只有一个结点不进行编码,直接 exit(1)退出
}
m=2*n-1;//赫夫曼码需要开辟的结点大小为 2n-1
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//开辟赫夫曼树结点空间 m+1
//初始化 n 个叶子结点
for(p=HT,i=0;i<=n;i++,p++,w++)
{
p->weight=*w;
p->parent=0;
p->lchild=0;
p->rchild=0;
}
//将 n-1 个非叶子结点的初始化
for(;i<=m;i++,p++)
{
p->weight=0;
p->parent=0;
p->lchild=0;
p->rchild=0;
}
//构造赫夫曼树
for(i=n+1;i<=m;i++)
{
min=Select(HT,i-1);//找出最小和次小的两个结点
s1=min.s1 ; //最小结点下标