二叉樹 & 二叉查詢樹

殷老實發表於2016-10-17

二叉樹 ( Binary Tree ) :  一種樹型結構,每個節點最多擁有兩個節點。( 如下圖 )



幾種型別的二叉樹

       1. full binary tree: 每個節點的孩子數 是 0 或者 2. 對高度沒有要求。 如下圖

           

       2. perfect binary tree: 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並且除了葉子節點剩下的所有節點都有兩個孩子節點。

       3. complete binary tree: 除了最後的那一層,其他層必須被填滿,並且對於最後一層必須從最左開始填滿。

       

 二叉查詢樹:

  1. 所有的字數都必須滿足, 左節點的值小於根節點,根節點小於右節點. 

  2. 空間複雜度為O(n)

  3. 搜尋/插入/刪除 的時間複雜度: 最優 O(log n) 最差 O (n)

        為什麼是log? 因為當比較的時候,我們能通過每次的比較過濾掉一半的樹結構。

 

對於二叉查詢樹:

  查詢/插入都很淺顯易懂。

對麻煩的是刪除節點。


二叉查詢樹的刪除節點:

  1. 刪除一個沒有子節點的節點 -  直接移除該節點

  2. 刪除一個有一個子節點的節點 - 直接移除該節點,並且將它的子節點置換到被刪除的節點的位置上

  3. 刪除一個有兩個子節點的節點 - 定義 將要被刪除的節點為N, 定義 另一個節點 為 R, R節點 是 來自 該樹 in-order 序列的N節點之前的那一個節點。然後將R的值賦值給N, 

     如果R不滿足 以上的條件1 或者 2那麼,將R作為N, 進行遞迴.

比如: in-oder 序列 1, 3, 4, 6, 7, 8, 10, 13, 14.   我們想要刪除10, 那麼10 為N, R為8. 


例子: 在以上的樹結構中,刪除節點 10.

    1. 根據 in-order 找到R為8, N為10, 將N的值賦值為 8。

    2. 因為此時的R不滿足1 或者 2 條件,所以繼續。

    3.  將 R 變成N, 並找到新的R 7. 

    4. 7 滿足條件 1 或者 2。 

    5. 結束。

 



有問題歡迎指出


相關文章