平衡二叉樹的旋轉以及簡便方法


剛開始聽這個平衡二叉樹的旋轉,一聽就蒙了,后來看了很多視頻,有很多的說法。下面來介紹平衡二叉樹

平衡二叉樹:就是每個節點的平衡因子(Balance Factor)(以下簡稱BF)的絕對值小於等於1,即為0或1。

而BF就是每個節點左子樹的高度減去右子樹的高度。

平衡二叉樹的旋轉共有四種情況:

下面說一個定義,新插入的節點為破壞點,而由於破壞點的存在使二叉樹失衡(|BF|>1)的節點為被破壞節點

    1.LL型:即為被破壞節點的左子樹的左子樹插入破壞節點。如圖:

 

 數值為10的節點的左子樹(數值為9的節點)的左子樹(數值為8的節點),使其不平衡,而10為被破壞節點,8為破壞節點,那么LL即為10的L的9的L,后一個L為中心,順時針旋轉10節點(右旋),則得到:

 

     RR型:即為被破壞節點的右子樹的右子樹插入破壞節點。如圖

 

 數值為10的節點的右子樹(數值為11的節點)的右子樹(數值為12的節點),使其不平衡,而10為被破壞節點,12為破壞節點,那么RR即為10的R的11的R,后一個R為中心,逆時針旋轉10節點(左旋),則得到:

 

    LR型:即為被破壞節點的左子樹的右子樹插入破壞節點。如圖:

 

 無論怎么旋轉發現一次都不能完成,則需先將其轉化為LL型(因為LR型第一個為L,所以轉化為LL型,再按上面的步驟進行旋轉),又因為LL為遞減的順序,所以6應該上去,5下來;

  1.轉化為LL型:

 

 這樣就構成了LL型,按上面的步驟進行二次旋轉

  2.按LL型處理:

 

     RL型:即為被破壞節點的右子樹的左子樹插入破壞節點。如圖:

 

 

先將其轉化為RR型,因為RR型,從上往下為遞增,因此需要將11向上,12向下,從而構造成,RR型;

  1.轉化為RR型

 

   2.正常的RR旋轉:

 

 注意:考試的題,二叉樹會很復雜,也就是說你要正確的LR,RR,LL,RL對於哪個節點而言,這樣你就會明白旋轉的中心

旋轉的操作都是對不平衡的最小子樹,例如如果兩個節點都不平衡,則先考慮深度大的節點,因為解決這個問題以后,可能深度小的也自然而然的解決了。

要解決旋轉之后產生分支的何去何從,這是你要看分支在原圖的位置,和其他點的大小關系,這樣你就知道旋轉之后,它要依附於哪個點

不管怎么操作都不能改變其中序遍歷的順序

 

認真的思考之后,不難發現,不論用什么方法,操作以后,都是讓是三個點之中大小為中間的數做根,比中間數小的數,做根的左孩子,比中間數大的數,做根的右孩子,因此有一個簡單的方法:

1.不管什么結構,從最深的葉子節點向上遞歸查找第一個失衡的點,標號為1.

2.再選1下面的點為2.

3.再選2下面的點為3.

4.不管什么結構,大小為中間的數做根,比中間數小的數,做根的左孩子,比中間數大的數,做根的右孩子

5.然后按照分支和每個點之間的關系,補全,這樣就完成了。

 

 

例子:在如圖所示的平衡二叉樹中插入關鍵字48后得到一顆新的平衡二叉樹,在新的平衡二叉樹中,關鍵字37所在的節點的左右子節點中保存的關鍵字分別是:

 

 插入48之后如圖:

 

 從下到上計算每個節點的BF;

BF(48)=0;    BF(37)=-1;    BF(90)=0;    BF(53)=1;    BF(13)=0;    BF(24)=-2;

發現失衡節點為24,那么24編號為1,又因為插入了48(所以造成失衡的路徑應為24->53->37->48),所以2號節點為53,3號節點為37

將三個節點排序,則37為根節點,24為左孩子,53為右孩子,如圖:

 

 再按原圖的關系,補全圖:53右孩子為90;49比37大比53小,所以48為53的右孩子;24的左孩子為13;如圖:

 

 

可知答案為24 53;

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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