带权路径长度(WPL): : 设二叉树有n 个叶子结点 ,每个叶子结点带有权值Wk 为 ,从根结点到每个叶子结点的长度为 Lk ,则每个叶子结点的带权路径长度之和就是: ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/10cb220acb60b7aa04baa4da7fddfc99.png)
待定:还没有搞清楚最小堆的结构如何定义
//哈夫曼树结构
typedef struct HNode
{
int Weight; //权值
HNode *Left, *Right;
}*HuffmanTree;
//构建哈夫曼树
HuffmanTree Huffman(MinHeap H)
{
//假设H->Size 个权值已经存在H->Elements[]->Weight 里,并已将H->Elements[] 按权值调整为最小堆
HuffmanTree T;
for(int i = 0; i < H->Size; i++)
{
T = (HuffmanTree)malloc(sizeof(HNode));
//最小值赋给Left,并删除
T->Left = DeleteMin(H);
//最小值赋给Right,并删除
T->Right = DeleteMin(H);
//左右权重和赋给 T->Weight
T->Weight = T->Left->Weight + T->Right->Weight;
//插入最小堆
Insert(H, T);
}
T = DeleteMin(H);
return T;
}