欢迎大家访问我的个人博客:endeavorchuan.com
赫夫曼树的带权路径最短,所以又叫做最优二叉树。
带权路径长度
- 结点:从该结点到根之间的路径长度×结点的权值
- 树:所有叶子结点的带权路径长度之和
例:下图为有四个叶子结点的二叉树,a、b、c、d的权值分别为2、4、6、8。
结点带权路径长度分别为:A→2×2=4 B→2×4=8 C→3×6=18 D→2×8=16
树的带权路径长度为:WPL=4+8+18+16=46
赫夫曼树的构造
- 比较各个结点的权值
- 选择两个权值最小的结点构造二叉树,根的权值为两结点的权值之和
- 在待构造结点中再选择一个权值最小的结点,与根结点继续构造二叉树
- 重复2、3操作,直至所有结点都成功构造二叉树
- 构造出来的二叉树为赫夫曼树,其WPL的值是最小的
构造赫夫曼树举例:
赫夫曼树特点:
- 权值越大的结点,离根结点越近
- 赫夫曼树中没有度为1的结点,又叫正则二叉树
- 树的带权路径长度最短
赫夫曼编码
赫夫曼编码可极大的节省存储空间,如下例所示。
编码规则为左子树代表0,右子树代表1。
如图所示的赫夫曼树中,字母所对应的赫夫曼编码依次为:
A→0 B→110 C→10 D→1110 E→1111
由此种方法产生的赫夫曼编码,是最短前缀码。