构造哈夫曼树
每个节点的存储结构设计如下图:
哈夫曼树的存储表示代码:
// 哈夫曼树的存储表示
typedef struct
{
int weight;//节点的权值
int parent, lchild, rchild;//节点的双亲、左孩子、右孩子的下标
}HTNode,*HuffmanTree;
所需的select函数如下:
//构建select函数
void Select(HuffmanTree HT, int m, int* s1, int* s2)
{ //从这m个数里边选择最小的2个//把第一个进行标记就ok
int i;//从下标为1的位置开始计数
//int min=HT[1].weight;这里直接赋值不合理,假如第一次那个1就是最小被选选中,那么第2次还是被选中
int min1 = 1000;
int min2 = 1000;//规定一个特别大的数
for (i = 1; i <= m; i++)
{
if (HT[i].parent == 0 && min1 > HT[i].weight)
{
min1 = HT[i].weight;
*s1 = i;
}
}
for (i = 1; i <= m; i++)
{//注意这个I!=*s1标记min
if (i != (*s1) && HT[i].parent == 0)
if (HT[i].weight < min2)
{
min2 = HT[i].weight;
*s2 = i;
}