对下面给出的数据序列,构造一颗哈夫曼树,并求出其带权路径长度 4,5,6,7,10,12,15,18,23 急!!!!

2025-02-24 05:26:17
推荐回答(1个)
回答1:

给你一个建树的代码
Select(HuffNode HT[],int j)
{
for(i=0;iif(HT[i].parent==0)
{s1=i;break;}
for(;iif((HT[i].parent==0)&&(HT[i].weights1=i;
HT[s1].parent=1;
for(i=0;iif(HT[i].parent==0)
{s2=i;break;}
for(;iif((HT[i].parent==0)&&(i!=s1)&&(HT[i].weights2=i;
return(s1);return(s2);}
void HuffmanTree(HuffNode HT[]){
m=2*n-1;int temp;
for(i=0;i {HT[i].weight=w[i]; HT[i].parent=0; HT[i].lchild=0; HT[i].rchild=0;}
for(;i {HT[i].weight=0; HT[i].parent=0; HT[i].lchild=0; HT[i].rchild=0;}
for(i=n;i Select(HT,i);
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s2;
HT[i].rchild=s1;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
temp=HT[i-1].lchild;HT[i-1].lchild=HT[i-1].rchild;HT[i-1].rchild=temp;
FILE *fp;
if((fp=fopen("E:\\HuffmanTree.txt","a+"))==NULL)
{printf("打不开此文件\n"); exit(0);}
printf("权值 父母 左孩子 右孩子\n");
fprintf(fp,"权值 父母 左孩子 右孩子\n");
for(i=0;ifprintf(fp,"%3d%6d%7d%8d\n",HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);
printf("%3d%6d%7d%8d\n",HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);
}
fclose(fp);
}
不完全,因为我做的还有译码和编码 当然还要你自己修改