建立哈弗曼树,也就是把一片森林转换成一棵树,遵循权重越大的离根节点越近,权重越小的离根节点越远的原则。
例如A,B,C,D四棵树组成的森林:权重分别是3,6,7,8
选择两颗权重最小的树组成一颗新树,A,B分别为左孩子右孩子,在删掉森林里A,B两棵树,在重复前面的操作,直到森林里只剩下一棵树。
完整代码
#include<stdio.h>
#include<stdlib.h>
#define NODE 10 //叶子结点数量
#define MAXNODE 2*NODE-1 //总结点数量
typedef struct huffmantree {
int weight;
int leftchild;
int rightchild;
int parent;
}Huffmantree,*hfnode;
int select(Huffmantree* T,int *s1,int *s2) {
int m1=-1, m2=-1;
int i = 1;
while ( i <= MAXNODE && m1==-1) {
//找到第一个没有双亲的结点
if (T[i].parent == 0) {
m1 = T[i].weight;
*s1 = i;
i++;
}
else
i++;
}
while