CreateHT创建哈夫曼树的代码有点问题,修改如下
void CreateHT(HTNode ht[],int n)
{
int i,k,lnode,rnode;
int min1,min2;
for(i=0;i<2*n-1;i++)
ht[i].parent=ht[i].lchild=ht[i].rchild=-1;
for(i=n;i<2*n-1;i++)
{
min1=min2=32767;
lnode=rnode=-1;
for(k=0;k<=i-1;k++)
{
if(ht[k].parent==-1)
{
if(ht[k].weight{
min1=ht[k].weight;
lnode=k;
}
}
}
ht[lnode].parent=i;
ht[i].lchild=lnode;
for(k=0;k<=i-1;k++)
{
if(ht[k].parent==-1)
{
if(ht[k].weight{
min2=ht[k].weight;
rnode=k;
}
}
}
ht[rnode].parent=i;
ht[i].rchild=rnode;
ht[i].weight=ht[lnode].weight+ht[rnode].weight;
}
}
第一个for循环从n开始
查找两个最小结点时有点问题,分开两次查找吧。
根据上面的修改,你再测试一下。