哈夫曼树的构造-C语言

#include 
#include 
typedef struct
{
    int weight,parent,lchild,rchild;
} HNode;
void HuffTree(HNode Huff[],int n)
{
    int i,j,m1,m2,x1,x2;   //m1,m2代表的是每次集合中最小的两个权重,x1,x2即为他们的下标.
    for(i=0; i<2*n-1; i++)
    {
        Huff[i].weight=0;
        Huff[i].parent=-1;
        Huff[i].lchild=-1;
        Huff[i].rchild=-1;
    }
    printf("Input 1~n value of leaf:\n");
    for(i=0; iscanf("%d",&Huff[i].weight);
    for(i=0; i1; i++)              //这里n-1不是很理解
    {
        m1=m2=32767;
        x1=x2=0;
        for(j=0; jif(Huff[j].parent==-1 && Huff[j].weightelse if(Huff[j].parent==-1 && Huff[j].weightprintf("Huff weight   lchild   rchild   parent\n");
    for(i=0;i<2*n-1;i++)
        printf("%3d%5d%10d%10d%10d\n",i,
                Huff[i].weight,Huff[i].lchild,
                Huff[i].rchild,Huff[i].parent);
}
int main()
{
    HNode Huff[100]={};//空间要足够大,至少要大于2n-1
    HuffTree(Huff,4);
    printf("Hello world!\n");
    return 0;
}

书上说要进行n-1次合并才能使初始的二叉树最终合并成一棵二叉树,n-1不是很理解,希望那位大神可以解惑。

你可能感兴趣的:(数据结构)