#include<stdlib.h>
#include<stdio.h>
#include <string.h>
typedef char HuffmanCode;
typedef struct
{ char data;
double weight;
int parent;
int lchild;
int rchild;
}HTNode, *HuffmanTree;
void CreateHT(HTNode ht[],int n0)
{ int i,k,lnode,rnode;
double min1,min2;
for(i=0;i<2*n0-1;i++)
ht[i].parent=ht[i].lchild=ht[i].rchild=-1;
for(i=n0;i<2*n0-2;i++)
{ min1=min2=32767;
lnode=rnode=-1;
for(k=0;k<=i-1;k++)
if(ht[k].weight==1)
{ if(ht[k].weight<min1)
{ min2=min1;
rnode=lnode;
min1=ht[k].weight;
lnode=k;
}
else if(ht[k].weight<min2)
{ min2=ht[k].weight;
rnode=k;}
}
ht[i].weight=ht[lnode].weight+ht[rnode].weight;
ht[i].lchild=lnode;
ht[i].rchild=rnode;
ht[lnode].parent=i;
ht[rnode].parent=i;
}
}
void PrintHuffTree(HTNode ht[],int n0) { //输出哈夫曼树
int i,n;
printf("\n哈夫曼树各项数据如下表所示:\n");
printf(" 结点i weight parent lchid rchild\n");
for(i=1;i<2*n0;i++)
printf("\t%d\t%d\t%d\t%d\t%d\n",i,ht[i].weight,ht[i].parent,
ht[i].lchild,ht[i].rchild);
printf("\n");
}
int main (void)
{ HTNode ht[10]={2,10,15,6,5,1,25};
int n0=5;
CreateHT( ht,5);
PrintHuffTree(ht,5);
return 0;
}