1. 程式人生 > >二叉樹的定義與性質

二叉樹的定義與性質


二叉樹的定義
  二叉樹是樹形結構的一個重要型別。許多實際問題抽象出來的資料結構往往是二叉樹的形式,即使是一般的樹也能簡單地轉換為二叉樹,而且二叉樹的儲存結構及其演算法都較為簡單,因此二叉樹顯得特別重要。
     二叉樹(BinaryTree)是n(n≥0)個結點的有限集,它或者是空集(n=0),或者由一個根結點及兩棵互不相交的、分別稱作這個根的左子樹右子樹的二叉樹組成。
   這個定義是遞迴的。由於左、右子樹也是二叉樹, 因此子樹也可為空樹。圖 6.3 中展現了五種不同基本形態的二叉樹。

  其中 (a) 為空樹, (b) 為僅有一個結點的二叉樹, (c) 是僅有左子樹而右子樹為空的二叉樹, (d) 是僅有右子樹而左子樹為空的二叉樹, (e) 是左、右子樹均非空的二叉樹。這裡應特別注意的是,二叉樹的左子樹和右子樹是嚴格區分並且不能隨意顛倒的,圖 6.3(c) 與圖 6.3(d) 就是兩棵不同的二叉樹。

二叉樹不是樹的特例

 (1)二叉樹與無序樹不同
     二叉樹中,每個結點最多隻能有兩棵子樹,並且有左右之分。
   二叉樹並非是樹的特殊情形,它們是兩種不同的資料結構。 (2)二叉樹與度數為2的有序樹不同
    在有序樹中,雖然一個結點的孩子之間是有左右次序的,但是若該結點只有一個孩子,就無須區分其左右次序。而在二叉樹中,即使是一個孩子也有左右之分。
  【例】下圖中(a)和(b)是兩棵不同的二叉樹,它們同右圖中的普通樹(作為有序樹或無序樹)很相似,但卻不等同於這棵普通樹。若將這三棵樹均看做普通樹,則它們就是相同的了。
         
   二叉樹並非是樹的特殊情形,它們是兩種不同的資料結構。


二叉樹的性質


   二叉樹具有以下重要性質:
性質1 二叉樹第i層上的結點數目最多為2i-1(i≥1)。
證明:用數學歸納法證明:
     歸納基礎:i=1時,有2i-1=20=1。因為第1層上只有一個根結點,所以命題成立。
     歸納假設:假設對所有的j(1≤j<i)命題成立,即第j層上至多有2j-1個結點,證明j=i時命題亦成立。
     歸納步驟:根據歸納假設,第i-1層上至多有2i-2個結點。由於二叉樹的每個結點至多有兩個孩子,故第i層上的結點數至多是第i-1層上的最大結點數的2倍。即j=i時,該層上至多有2×2i-2=2i-1個結點,故命題成立。

性質2 深度為k的二叉樹至多有2k-1個結點(k≥1)。

證明:由性質 (1) 可知各層結點最多數目之和為: 2 0 +2 1 +2 2 +.....+2 k-1 ;由二進位制換算關係可知: 2 0 +2 1 +2 2 +.....+2 k-1 = 2 k -1 ;因此二叉樹樹中結點的最大數目為 2 k -1 。性質 2 證明完畢。
                
性質3 在任意-棵二叉樹中,若葉子結點(即度為0的結點)的個數為n0,度為1的結點數為n1,度為2的結點數為n2,則no=n2+1。
證明:因為二叉樹中所有結點的度數均不大於2,所以結點總數(記為n)應等於0度結點數、1度結點(記為n1)和2度結點數之和:
                     n=no+n1+n2 (6.1)
    
由於有n個結點的二叉樹總邊數為n-1條,於是得:
                     n-1=0*n0+1*n1+2*n(6.2) 
將(6.1)式代入(6.2)式得:n0=n2+1。性質3證明完畢

滿二叉樹和完全二叉樹是二叉樹的兩種特殊情形。
1、滿二叉樹(FullBinaryTree) 
     一棵深度為k且有2k-1個結點的二又樹稱為滿二叉樹。
     滿二叉樹的特點:
  (1) 每一層上的結點數都達到最大值。即對給定的高度,它是具有最多結點數的二叉樹。
  (2) 滿二叉樹中不存在度數為1的結點,每個分支結點均有兩棵高度相同的子樹,且樹葉都在最下一層上。
  【例】圖6.4(a)是一個深度為3的滿二叉樹。
         


2、完全二叉樹(Complete BinaryTree) 

    若一棵二叉樹至多隻有最下面的兩層上結點的度數可以小於2,並且最下一層上的結點都集中在該層最左邊的若干位置上,則此二叉樹稱為完全二叉樹。
  特點:
  (1) 滿二叉樹是完全二叉樹,完全二叉樹不一定是滿二叉樹。
  (2) 在滿二叉樹的最下一層上,從最右邊開始連續刪去若干結點後得到的二叉樹仍然是一棵完全二叉樹。
  (3) 在完全二叉樹中,若某個結點沒有左孩子,則它一定沒有右孩子,即該結點必是葉結點。
【例】如圖6.4(c)中,結點F沒有左孩子而有右孩子L,故它不是一棵完全二叉樹。
【例】圖6.4(b)是一棵完全二叉樹。
  
性質 4 具有 n 個結點的完全二叉樹樹深為 +1 (其中 表示不大於 x 的最大整數)。 
證明:假設某完全二叉樹的結點總數是 n ,它的值應該大於樹深為 K-1 的滿二叉樹結點數 2 k-1 -1 ,小於等於樹深為 K1 的滿二叉樹結點數 2 k -1 。 
2 k-1 -1 < n <= 2 k -1 
由於該不等式各項均為整數,當對兩端兩項各加 1 時不等式發生變化得: 
2 k-1 <= n < 2 k 
再對其取對數得: k-1<= log 2 n < k 
如果對 log 2 n 取整顯然等於 k-1 :, 所以得: 
性質 4 證明完畢。

性質 5 若對有 n 個結點的完全二叉樹進行順序編號 (1 ≤ i ≤ n) ,那麼: 
對於編號為 i(i ≥ 1) 結點 : 
當 i=1 時,該結點為根,它無雙親結點; 
當 i>1 時,該結點的雙親結點編號為 ; 
若 2i ≤ n ,它有編號為 2i 的左孩子,否則沒有左孩子; 
若 2i+1 ≤ n ,則它有編號為 2i+1 的右孩子,否則沒有右孩子。 
對照圖 6.4(a) 或圖 6.4(b) 讀者可看到由性質 ( 5 ) 所描述的結點與編號的對應關係 。