哈夫曼编码问题 大神救我~

2025-02-25 22:24:54
推荐回答(1个)
回答1:

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开始

查找两个最小结点时有点问题,分开两次查找吧。

根据上面的修改,你再测试一下。