平衡二叉樹與紅黑樹的簡單知識

        平衡二叉樹由Adelson-Velskii和Landis在1962年提出,因此也成爲AVL樹。它是一棵空樹或者是具有以下性質的二叉排序樹: 

        (1)根結點的左子樹和右子樹的深度最多相差1。

        (2)根結點的左子樹和右子樹也是二叉平衡樹。

         平衡因子: 節點的平衡因子是該節點的左子樹和右子樹的深度之差。

         最小不平衡子樹: 最小不平衡子樹是指平衡二叉樹的構造過程中,以距離插入點最近的,而平衡因子的絕對值大於1的節點爲根節點的子樹。

         出現不平衡的情況主要有4種: RR型,RL型,LL型,LR型。(PS: 比起插入,它的刪除更有刺激哦)

         由於算法難度比較大,小編未能實現出來,所以提供不了源代碼。其實我們不難看出,AVL樹有着極高的平衡要求,即左右子樹高度相差最多不能超過1,當我輸出一串連續遞增或遞減的數字時,需要不斷地調整才能保持它的平衡。由於它的高度平衡性,在插入或刪除算法中,對樹的旋轉次數較多,所以在C++或Java等編程語言中難以廣泛使用。由此我們引入了另一種算法,紅黑樹算法。紅黑樹具有以下幾個特徵: 

       (1)節點只能爲紅色或黑色。

       (2)根節點只能爲黑色。

       (3)每個葉子節點(空節點)都爲黑色。

       (4)如果一個節點爲紅色,那麼它的兩個節點爲黑色。

       (5)從每個節點,從該節點到其子孫節點的所有路徑上包含的相同數目的黑節點。

         很明顯,紅黑樹的平衡條件沒有AVL樹那麼嚴格,因此減少插入或刪除時調整的次數,每個節點的最大高度之差不超過2倍,因此它比AVL樹有着更大範圍地使用。由於紅黑樹算法也有着比較大的難度,小編也未能實現出來,所以也提供不了源代碼。(紅黑樹的插入主要有5類型,有興趣可以百度下)


下面附上Java的最高境界: 


         

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章