哈夫曼树算法

哈夫曼树的节点结构

结点结构由:weight(权值),lchild(左孩子结点下标),rchild(右孩子结点下标),parent(双亲结点下标)。

struct ElemType
{
    
    
    int weight;                //假定权值为整数
    int parent,lchild,rchild;   //游标
}

哈夫曼算法代码

void HuffmanTree(ElemType huffTree[],int w[],int n)
{
    
    
   int i,k,i1,i2;
   for(i=0;i<2*n-1;i++)   //所有结点均没有双亲和孩子
   {
    
    
      huffYree[i].parent=-1;
      huffTree[i].lchild=huffTree[i].rchild=-1;
   }
   for(i=0;i<n;i++)      //存储叶子节点的权值
     huffTree[i].weight=w[i];
   for (k=n;k<2*n-1;k++)    //n-1次合并
   {
    
    
      Select(huffTree,i1,i2);  //权值最小的根节点下标为i1和i2
      huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight;
      huffTree[i1].parent=k;huffTree[i2].parent=k;
      huffTree[k].lchild=i1;huffTree[k].rchild=i2;
   }
}  

猜你喜欢

转载自blog.csdn.net/qq_51344334/article/details/119938936