您的位置:首页 > 其它

哈夫曼树的构造

2017-04-27 18:11 288 查看
本文转自http://blog.csdn.net/qq_33990383/article/details/53073825

注意:哈夫曼树并不唯一,但带权路径长度一定是相同的。

(1)8个结点的权值大小如下:



(2)从19,21,2,3,6,7,10,32中选择两个权小结点。选中2,3。同时算出这两个结点的和5。



(3)从19,21,6,7,10,32,5中选出两个权小结点。选中5,6。同时计算出它们的和11。



(4)从19,21,7,10,32,11中选出两个权小结点。选中7,10。同时计算出它们的和17。

(BTW:这时选出的两个数字都不是已经构造好的二叉树里面的结点,所以要另外开一棵二叉树;或者说,如果两个数的和正好是下一步的两个最小数的其中的一个,那么这个树直接往上生长就可以了,如果这两个数的和比较大,不是下一步的两个最小数的其中一个,那么就并列生长。)


(5)从19,21,32,11,17中选出两个权小结点。选中11,17。同时计算出它们的和28。



(6)从19,21,32,28中选出两个权小结点。选中19,21。同时计算出它们的和40。另起一颗二叉树。



(7)从32,28, 40中选出两个权小结点。选中28,32。同时计算出它们的和60。  



(8)从 40, 60中选出两个权小结点。选中40,60。同时计算出它们的和100。 好了,此时哈夫曼树已经构建好了。



注意:哈夫曼树并不唯一,但带权路径长度一定是相同的。

(1)8个结点的权值大小如下:



(2)从19,21,2,3,6,7,10,32中选择两个权小结点。选中2,3。同时算出这两个结点的和5。



(3)从19,21,6,7,10,32,5中选出两个权小结点。选中5,6。同时计算出它们的和11。



(4)从19,21,7,10,32,11中选出两个权小结点。选中7,10。同时计算出它们的和17。

(BTW:这时选出的两个数字都不是已经构造好的二叉树里面的结点,所以要另外开一棵二叉树;或者说,如果两个数的和正好是下一步的两个最小数的其中的一个,那么这个树直接往上生长就可以了,如果这两个数的和比较大,不是下一步的两个最小数的其中一个,那么就并列生长。)


(5)从19,21,32,11,17中选出两个权小结点。选中11,17。同时计算出它们的和28。



(6)从19,21,32,28中选出两个权小结点。选中19,21。同时计算出它们的和40。另起一颗二叉树。



(7)从32,28, 40中选出两个权小结点。选中28,32。同时计算出它们的和60。  



(8)从 40, 60中选出两个权小结点。选中40,60。同时计算出它们的和100。 好了,此时哈夫曼树已经构建好了。



二、哈夫曼编码
将哈夫曼树中的权值左分支改为0,右分支改为1.此时,从树根到叶子节点所经过的路劲的0或1的编码即为该结点的哈夫曼编码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: