1.以权值作为根节点构建n棵二叉树,组成森林。 2.在森林中选出2个根节点最小的树合并,并作为一棵新树的左右子树,并且新树的根节点为其左右子树的根节点之和。 3.从森林中删除刚才选取的两棵树,并将新树加入森林。 4.重复2,3步骤,直到只剩一棵树为止,该树即为赫夫曼树。
给出一串字母:ABBBCCCCCCCCDDDDDDEE,构建他的赫夫曼树。
1.先计算出每个字母出现的频率(权值,这里直接用出现的次数)。
A | B | C | D | E |
---|---|---|---|---|
1 | 2 | 8 | 6 | 2 |
2.利用这些权值构建一棵赫夫曼树(又称霍夫曼树,哈夫曼树,最优二叉树)。
根据“左0右1”的原则,求得的赫夫曼编码:
A | B | C | D | E |
---|---|---|---|---|
1110 | 110 | 0 | 10 | 1111 |
1.n个权值构建出来的赫夫曼树拥有n个叶子节点。
2.每个赫夫曼编码都不是另外一个赫夫曼编码的前缀。
3.赫夫曼树带权路径长度最短的树,权值较大的节点离根较近。
4.带权路径的长度:树中所有的叶子节点的权值乘其到根节点的路径长度与最终的赫夫曼编码长度成正比关系。