哈夫曼树的正确打开方式

1.哈夫曼树画法交流
假设一组权值节点如下,并画出哈夫曼树,
(4,5,8,24,13,17,34)
画哈夫曼树的规则之一就是:
1.选出权值差值最小的两个节点互为兄弟节点(即4,5互为兄弟节点)
2.合并后把他们的父节点权值(即:9)带入到原队列中和其他节点进行比较,并找出其中最小的两个节点并合并之,那么就让该节点和新的节点9合并(即让节点9和节点8互为兄弟节点)并再次合并成一个新的节点(即:17)
3.重复上面的步骤,把再次合并后的新的节点带入到原队列中和剩下的其他节点相比,但如果剩下的节点中至少有2个节点不大于该合并后的新的节点我们就让这两个节点互为兄弟节点并合并他们。(即原队列中存在13,17两个节点其不小于新节点17,让他们互为兄弟节点合并之)遵循两个节点差值最小的互为兄弟节点。
4. 还是遵循节点间的权值差值最小的2个节点互为兄弟节点
因此不难发现新节点17与原队列中剩下的节点24互为兄弟节点并合并,新节点30与原队列中剩下的节点34互为兄弟节点
合并后的新节点为41和64,这是原队列中所有的节点已经被合并完。故该哈夫曼树的根节点为105。
哈夫曼树构造思想如下图:
哈夫曼树的正确打开方式_第1张图片
整理后哈夫曼树如下:
哈夫曼树的正确打开方式_第2张图片
引入二进制编码
哈夫曼树的正确打开方式_第3张图片
各叶子节点的二进制编码表示如下:
8:000 ,4:0010, 5:0011, 24:01, 13:100, 17:101, 34:11

这样构造出的哈夫曼树满足权值越小的节点离根节点越远的特性!
怎么样是不是发现很简单!有没有学会!
这只是我个人在构造哈夫曼树时总结出来的经验,如有雷同不胜荣幸!
如果有什么不同的观点欢迎在下方评论!

你可能感兴趣的:(离散数学)