实现哈夫曼树编码的算法可分为两大部分:
(1)构造哈夫曼树;
(2)在哈夫曼树上求叶结点的编码;
哈夫曼树构造算法:
(1)由给定的n个权值构造n棵只有一个叶结点的二叉树,从而得到一个二叉树的集合F={T1,T2,,...,TN}
(2)在F中选取根结点的权值最小和次小的两棵二叉树作为左,右子树构造一棵新的二叉树,这棵二叉树根结点的权值为其左右子树权值之和
(3)在集合F中删除作为左右子树的两棵二叉树,并将新建立的二叉树加入到集合F中
(4)重复(2)(3)直到F中只剩下最后一棵所需的二叉树,就是哈夫曼树
在哈夫曼树上求叶结点的编码算法:
在已建立的哈夫曼树中,从叶结点开始,沿结点的双亲链回退到根结点,每回退一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼的值
规定哈夫曼树中的左分支代表0,右分支代表1
举例:
A:5 B:29 C:7 D:8 E:14 F:23 G:3 H:11
哈夫曼树: