在判定哈夫曼树的时候,有一个条件就是使其平均比较次数最小,所以依据这个可以判定你构造的哈夫曼树是不是正确的。但是昨天在实践的时候发现,树并列生长的时候不同,导致的结果千差万别,那么
到底什么时候树应该并列?下面从实例出发说明,答案在过程中
例子:
给定下列定权值7,18,3,5,12,8,构造相应的哈夫曼树。
(1)首先将上述值进行排序
(2)从上列权值中选择两个最小的值。选中3,5。计算出两个结点的值为8
(3)将新得到的结点8重新排序,得到下列顺序
(4)选择其中最小的两个结点7,8
注意:如何选择下面的值进行树生长呢?分两种情况
- 如果新得到值在即将合成两个结点最小的值中间,则选择即将中值最小的结点进行树生长
- 如果新得到值等于或大于即将合成两个结点最小的值,则即将合成的结点选择并列生长
由上图可以看出,即将合成的两个点是7,8,新得到的值是8,满足第二种情况,则7,8并列生长
(5)将新得到的结点15加入序列并排序
(6)因为是二叉树,所以8(3+5)选择12与15中最小的12生长(8与12并不并列生长)
(7)新得到的20重新排序
(7)结点15(7+8)会在18,20间选择最小的18
(8)将33进行排序
(9)20(8+12)和33(15+18)合并,得到最终的哈夫曼树