平衡二叉樹和應用場景


 騰訊公司昨日接受記者采訪的平衡二叉樹二叉樹的排序,絕對是歧視。汗...

平衡二叉樹稱為平衡樹,由Adelson-Velskii和Landis至1962首次提出,它也被稱為AVL樹。

他的定義是非常easy,1,此二叉樹即是平衡二叉樹。把二叉樹的每一個節點的左子樹減去右子樹定義為該節點的平衡因子。

二叉平衡樹的平衡因子僅僅能是1、0或者-1。

平衡二叉樹是對二叉搜索樹(又稱為二叉排序樹)的一種改進。二叉搜索樹有一個缺點就是,樹的結構是無法預料的。任意性非常大。它僅僅與節點的值和插入的順序有關系。往往得到的是一個不平衡的二叉樹。在最壞的情況下。可能得到的是一個單支二叉樹,其高度和節點數同樣,相當於一個單鏈表。對其正常的時間復雜度有O(lb n)變成了O(n)。從而喪失了二叉排序樹的一些應該有的長處。

當插入一個新的節點的時候。在普通的二叉樹中不用考慮樹的平衡因子,僅僅要將大於根節點的值插入到右子樹,小於節點的值插入到左子樹,遞歸就可以。

而在平衡二叉樹則不一樣,在插入節點的時候,假設插入節點之后有一個節點的平衡因子要大於2或者小於-2的時候,他須要對其進行調整。如今僅僅考慮插入到節點的左子樹部分(右子樹與此同樣)。主要分為下面三種情況:

(1)若插入前一部分節點的左子樹高度和右子樹高度相等。即平衡因子為0。插入后平衡因子變為1。仍符合平衡的條件不用調整。

(2)若插入前左子樹高度小於右子樹高度。即平衡因子為-1,則插入后將使平衡因子變為0,平衡性反倒得到調整,所以不必調整。

(3)若插入前左子樹的高度大於右子樹高度。即平衡因子為1。則插入左子樹之后會使得平衡因子變為2,這種情況下就破壞了平衡二叉樹的結構。所以必須對其進行調整,使其加以改善。

調整二叉樹首先要明確一個定義。即最小不平衡子樹。最小不平衡子樹是指以離插入節點近期、且平衡因子絕對值大於1的節點做根的子樹。

以下解說平衡二叉樹最主要的4種調整操作,調整的原則是調整后他的搜索二叉樹的性質不變,即樹的中序遍歷是不會改變的:

1. LL型調整。

在B點的左子樹上插入一個節點。插入后B點的左子樹的平衡因子變為1。A節點的平衡因子變為了2。這樣能夠看出來A節點為根節點的子樹是最小不平衡子樹。

調整時,將A的左孩子B向右旋轉取代A稱為原來不平衡子樹的根節點。將A的節點右下旋轉稱為B的右子樹的根節點,而B的原右子樹變為A的左子樹。具體步驟例如以下圖:

2. RR型調整操作

在A節點的右孩子的右子樹上插入節點。使得A節點的平衡因子由-1變為-2而引起的不平衡所進行的調整操作。調整操作大致一樣。看圖就能夠明確了。

 

3. LR型的調整操作。在A節點的左孩子的右子樹上插入節點。使得A節點的平衡因子由1變為了2而引起的不平衡所進行的調整的操作。調整過程如圖:

4. RL型的調整操作。不多說了,直接上圖:

 

在二分搜索樹的插入和刪除計算,它有一個平衡樹的優勢:使樹結構是更好,從而提高了速度查找操作。其缺點是:插入和刪除操作復雜,從而降低了它們的操作速度。

不平衡的二叉搜索樹的刪除操作引起的比插入節點復雜的局面節點。這將不討論。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM