数据结构(四)——哈夫曼树的构造(什么时候并列?)

在判定哈夫曼树的时候,有一个条件就是使其平均比较次数最小,所以依据这个可以判定你构造的哈夫曼树是不是正确的。但是昨天在实践的时候发现,树并列生长的时候不同,导致的结果千差万别,那么

到底什么时候树应该并列?下面从实例出发说明,答案在过程中

例子:

给定下列定权值7,18,3,5,12,8,构造相应的哈夫曼树。

(1)首先将上述值进行排序

(2)从上列权值中选择两个最小的值。选中3,5。计算出两个结点的值为8

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第1张图片

(3)将新得到的结点8重新排序,得到下列顺序

(4)选择其中最小的两个结点7,8

注意:如何选择下面的值进行树生长呢?分两种情况

  1. 如果新得到值在即将合成两个结点最小的值中间,则选择即将中值最小的结点进行树生长
  2. 如果新得到值等于或大于即将合成两个结点最小的值,则即将合成的结点选择并列生长

由上图可以看出,即将合成的两个点是7,8,新得到的值是8,满足第二种情况,则7,8并列生长

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第2张图片

(5)将新得到的结点15加入序列并排序

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第3张图片

(6)因为是二叉树,所以8(3+5)选择12与15中最小的12生长(8与12并不并列生长)

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第4张图片

(7)新得到的20重新排序

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第5张图片

(7)结点15(7+8)会在18,20间选择最小的18

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第6张图片

(8)将33进行排序

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第7张图片

(9)20(8+12)和33(15+18)合并,得到最终的哈夫曼树

数据结构(四)——哈夫曼树的构造(什么时候并列?)_第8张图片

 

 

你可能感兴趣的:(#,数据结构与算法)