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中僅剩一顆樹爲止: