CHAPTER_9 提高篇(3)——数据结构(2)
9.8.1哈夫曼树
首先来明确两个定义。对于一棵树,我们把叶子节点的权值乘以其路径长度的结果称为这个叶子节点的带权路径长度。例如下图中,叶子节点G的带权路径长度为 3 * 2 = 6 。树的带权路径长度(WPL)等于它所有叶子节点得到带权路径长度之和。对于下面这棵树,其WPL等于3 * 2 + 5 * 2 + 13 * 1 = 29 。
我们有如下问题:已知n个数,寻找一棵树,使得树的所有叶子节点的权值为这n个数,并且使得这棵树的带权路径长度最小。这棵带权路径长度最小的树被称为哈夫曼树(又称最优二叉树)。
寻找这棵树的过程就是给定叶子节点构造哈夫曼树的过程,算法如下:
(1)初始状态共有n个节点(权值分别为给定的n个数),将它们视作n棵只有一个节点的树。