哈夫曼树
本篇仅为建树核心代码,其余代码与之前建树代码均类似。
Tree* create(int a[],int n)
{
Tree *root=(Tree*)malloc(sizeof(Tree)*(n+1));
int i;
for(i=0;i<n;i++)
{
root[i].data=a[i];//数组a只起到一个赋值的作用
root[i].leftchild=NULL;
root[i].rightchild=NULL;
}
Tree *p=(Tree*)malloc(sizeof(Tree));
p=&root[0];//先将最小权的结点作为第一结点从下向上建立哈夫曼树
for(i=1;i<n;i++)//剩有n-1个带权结点,依次将权值相加建立新结点
{
Tree *q=(Tree*)malloc(sizeof(Tree));
q->leftchild=&root[i];
q->rightchild=p;
q->data=(p->data+root[i].data);
p=q;
}
return p;//返回最后一个结点,即树的根
}
从下至上由权值小的依次建立,每建立一个新结点,将状态转换