哈夫曼树
- 带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值W(k),从根结点到每个叶子结点的长度为l(k),则每个叶子结点的带权路径长度之和就是

- 最优二叉树或哈夫曼树:WPL最小的二叉树
- 特点
- 没有度为1的结点
- n个叶子结点的哈夫曼树共有2n-1个结点
- 哈夫曼树的任意非叶节点的左子树交换后仍是哈夫曼树
哈夫曼树的构造

typedef struct TreeNode *HuffmanTree
struct TreeNode {
int Weight;
HuffmanTree Left, Right;
}
HufmanTree Huffman (MinHeap H) {
int i;
HuffmanTree T;
BulidMinHeap(H);
for (i = 1; i < H->Size; i++) {
T = malloc(sizeof(struct TreeNode)) ;
T->Left = DeleteMin(H);
T->Right = DeleteMin(H);
T->Weight = T->Left->Weight+T->Right->Weight;
Insert(H, T);
}
T = DeleteMin(H);
return T;