1、树的路径长度算法
图1: 图2:
spa
n个节点的二叉树的路径长度不小于下述数列前n项之和(从根节点出发,从左到右编号),即blog
PL=Σi[log2i]=0+1+1+2+2+2+2+3+3+3+3+3+3+3+3+4+…([log2i]取整数)二叉树
其路径长度最小者为 PL=Σi[log2i],只有彻底二叉树知足才要求PL=Σi[log2i]im
图1为彻底二叉树,图2不是彻底二叉树,其PL 大于 Σi[log2i]。img
2、带权路径长度co
不少应用问题中为树的叶节点赋予一个权值,用于表示出现频度、几率值等。所以,在问题处理中把叶节点定义得不一样于非叶节点,把叶节点看做“外节点”,非叶节点看做“内节点”。这样的二叉树称为扩充二叉树。ps
扩充二叉树中只有度为2的内节点和度为0的外节点。根据彻底二叉树的性质,有n个外节点就有n-1个内节点,总节点数为2n-1.分支
若一颗扩充二叉树有n个外节点,第i个外节点的权值为wi,它到根的路径长度为li,则该外节点到根的带权路径长度为wi*li。
扩充二叉树的带权路径长度:树的各外节点到根的带权路径长度之和,即WPL=Σi(wi*li)
对于一样的一组权值,放在外节点上,树的组织方式不一样,带权路径长度也不一样。
如图1:WPL=15*1+14*1+7*2+8*2,如何使得扩充二叉树的带权路径长度最小,当权值大的值离根近,权值小的离根远,则最小。
Huffman树
在带权路径长度达到最小的扩充二叉树即为Huffman树。在Huffman树中,权值大的节点离根最近。
哈夫曼树的构造算法:
1)由给定的n个权值{w0,w1,w2……wn-1},构造具备n颗扩充二叉树的森林F={F0,F1,F2……Fn-1},其中每颗扩充二叉树Ti只有一个带权值wi的根节点,其左右子树均为空。
2)重复如下步骤,直到F中仅剩一颗树为止: