【代码】
#include <stdio.h>
#define maxSize 1000
#define INF 10000
typedef struct
{
int weight;
int parent, lchild, rchild;
}HNode;
HNode HTree[maxSize];
int Select(int n)
{
int i, j;
int min = INF;
j = 0;
for (i = 1; i <= n; ++i)
{
//如果为自由结点(双亲结点为空)
if (HTree[i].parent == 0)
{
if (HTree[i].weight < min)
{
min = HTree[i].weight;
j = i;
}
}
}
return j;
}
//有n个叶子节点的哈夫曼树有2n-1个结点个数,验证5个叶子结点应该得到9的结果
int main()
{
int i, n, count;
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
HTree[i].weight = i;//因为为验证性题目,所以权值任意设定即可
HTree[i].parent = 0;
HTree[i].lchild = 0;
HTree[i].rchild = 0;
}
count = n;//现在有n个叶子结点
while (1)
{
int s1, s2;
//找出第一个最小值结点,此时的count是下标,count+1表示实际数量
s1 = Select(count);
HTree[s1].parent = count + 1;
s2 = Sel