算例一
-
题目描述
-
解题思路
①哈夫曼树:给定n 个结点和它们的权值,以它们为叶子结点构造一棵带权路径和最小的二叉树,该二叉树即为哈夫曼树,同时也被称为最优树
②转化为:取数组里最小两个数,合并后记录权值,将权值放入数组,并重复操作,直到只有一个数位置,最后把每次的权值加起来
-
解题代码
#include<stdio.h>
#include<stdlib.h>
//排序函数
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int n, i, TWeight;
int array[1001];
while (scanf("%d", &n) != EOF)
{
//输入节点
for (i = 0;i < n;i++)
{
scanf("%