閱讀403 返回首頁    go 阿裏雲 go 技術社區[雲棲]


二叉樹的性質和應用

二叉樹的性質

二叉樹是圖的一種特殊情形。

二叉樹與有序樹:在隻有一個孩子結點的情況下,二叉樹有左右之分、有序樹無左右之分。

 

非空二叉樹中,共有n個結點,度為0的結點有n0個,度為1的結點有n1個,度為2的結點有n2個,則n0=n2+1;

推導:n=n0+n1+n2;

           n-1=n1+2*n2;  聯立得解。(最愛考這個了...)

 

非空二叉樹第i層上至多有2^(i-1)個結點;//pow(2,i-1)

高為h的二叉樹最多有2^h-1個結點;//pow(2,h)-1

 

完全二叉樹的性質:

對完全二叉樹按從上到下。從左到右的次序標號1,2...n。有如下性質:

1.i>1時,i結點的父節點為int(i/2);

2.i結點的左孩子為2*i,右孩子為2*i+1;

3.i結點所在的層次為int (log(下標:2)(表達式:i))+1;  //floor(log(i)/log(2))+1

 

二叉排序樹

二叉排序樹(Binary Sort Tree)又稱二叉查找樹,亦稱二叉搜索樹。 特點:左孩子結點值<=根結點值<=右孩子結點值。所以對其中序遍曆可得到遞增數列。

 

平衡二叉樹(AVL)

樹中每個結點的左右子樹高度差的絕對值<=1

 

 最優二叉樹

帶權路徑長度:根結點到x結點的路徑長度*x結點的權值;

樹的帶權路徑長度:所有葉子結點的帶權路徑長度之和;

給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(Huffman tree)

哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。

哈夫曼樹的構造:

給定n個權重分別為w1,w2,...,wn的結點,構造最優二叉樹的算法見下:

1.將每個結點作為一個樹,構成森林F;

2.構造一個新結點,從森林F中挑選兩個根結點權重最小的樹T1與T2作為新結點的左右子樹;

3.從F中刪除T1、T2,將新構造的樹加入F;

4.重複步驟2、3,知道森林中隻有一棵樹為止。

 

數據結構:——可以看作特殊的完全二叉樹。

小根堆中,左孩子結點值與右孩子結點值均小於根結點值。同理有大根堆。用途之一:堆排序。

堆排序需要解決兩個問題

1.如何由無序序列組成小根堆?

2.輸出最大元素後,如何調整堆?

解答:

1.先將n個元素隨意排列成完全二叉樹。依次對n、n-1、...、1號結點進行調整。若其值小於父結點,進行對調。

2.輸出後,將最後一個結點放到堆頂,再自上而下調整,直至葉結點。

 

最後更新:2017-04-03 12:55:50

  上一篇:go 【Android】數據共享 sharedPreferences 相關注意事項
  下一篇:go eclipse安裝svn插件