哈夫曼树(简单建立)

it2022-05-05  154

哈夫曼树

本篇仅为建树核心代码,其余代码与之前建树代码均类似。

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;//返回最后一个结点,即树的根 }

从下至上由权值小的依次建立,每建立一个新结点,将状态转换


最新回复(0)