如何构造哈夫曼树?借助口诀+两个特点
贪心算法:先挑小的叶子来构造,大的留到最后就能离根近一些
哈夫曼算法的步骤:根据n个给定的权值,构造有n个树的森林,n个树都只有1个根结点,其权值给定(森林中有几个树?给了几个权值就几个树,每个树都只有1个结点)
重复2,3步骤
直到只剩下一棵树结束
口诀:
例子:
1.构造森林全是根:一开始就用4个结点构造了4棵二叉树,构成一个森林(有几个叶子结点就有几棵树)
2.选用两小造新树:选2,4为他们两个增加一个双亲结点作为根,这个新树的根结点的权值是两个根结点权值的和,2+4=6
3.删除两小添新人:现在变成3棵树了,选5,6造一个新树,添加一个根结点,权值5+6=11
4.重复2,3剩单根:
错解:
我做错了
观察:
4个叶子结点构造新树,新树的根结点都是度为2的,它必有左右子树,因为我们选用了两小,一个做左子树,一个做右子树,所以新添加的结点都是度为2的,我们一开始的结点都是度为0的
包含n个叶子结点总共有多少个结点?2n-1
两两合并产生一个新的结点,如果有n个,一定会合并n-1次,最后才剩下一棵树,这n-1次合并就会产生n-1个结点,这n-1个结点都是度为2的结点,而度为0的结点是n个
再看一个例子:
总结:
1.
2.