先看图
参数:7 5 5 2 4
这是无需排列的,需要弄成有序排列如下:2 4 5 5 7
第一步:找到这个数组中最小的连个相加如图
依据哈夫曼原则2+4=6,那么新的数组就是:5 5 6 7
第二步:找到这个数组中最小的连个相加,因为新产生的6不属于接下来 数组中(5 5 6 7)的最小的2个数( 5 5)所以最小的5+5=10这个单独放置,把10加入到数组中 6 7 10
第三部,数组中6 7 10 的最小数为6 7,所以最小的两个数据相加6+7=13 ,所以新数据10 13
第三部,数组中10 13 剩下的两个数据相加10+13=26 ,因为第二部产生了一个10还没加载到图中,so
注意事项:如果你新产生的值不在接下里最小俩个数据中如5 5 6,那么5 5这个两个最小数据画的图就到单独放置,最后再画在一起,要知道哈夫曼树是需要把原始数据都挂在到二叉树的叶节点(叶节点就是没有子节点的节点,如步骤一中的图,2和4节点就是叶节点)
在举一个例子:
数组:6 7 13 16 18 30
原始数据:6 7 13 16 18 30
第一步数据13 13 16 18 30,因为新产生的数据13在你接下来要找到最小的2个数中,所以直接在6+7=13的图上画就行
第二步数据 16 18 26 30,因为新产生的数据34不在你接下来要找到最小的2个数中,所以 16+18=34需要单独画
第三步数据 26 30 34,因为新产生的数据26+30=56 ,剩下 34 56
所以26+30=56这个图直接画
第四步数据 34 56 , 剩下 34 56
由于34是第二步产生的,直接和第三步56结合 34+56=90,就得到最终的哈夫曼树
注释:如有错误请联系更正,转载请附加原文链接和出处