哈夫曼树的节点结构
结点结构由: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;
}
}