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

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

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

例子:

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

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

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

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

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

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

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

由上图可以看出,即将合成的两个点是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)合并,得到最终的哈夫曼树

 

 

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿成长轨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值