二叉平衡樹的調整

出自:http://www.cnblogs.com/lezhifang/p/6632355.html

說明:僅用於個人複習使用,如有侵權,立即刪除

一:平衡二叉樹的概念

平衡二叉樹(Balanced binary tree)又稱爲AVL樹,是一種特殊的二叉排序樹,且左右子樹的高度之差的絕對值不超過1.

定義:平衡二叉樹或爲空樹,或爲如下性質的二叉排序樹:

(1)左右子樹深度之差的絕對值不超過1;

(2)左右子樹仍然爲平衡二叉樹.

平衡因子BF=左子樹深度-右子樹深度.

平衡二叉樹每個結點的平衡因子只能是1,0,-1。若其絕對值超過1,則該二叉排序樹就是不平衡的。

 

二、平衡二叉樹調整

  若向平衡二叉樹中插入一個新結點後破壞了平衡二叉樹的平衡性。首先要找出插入新結點後失去平衡的最小子樹,然後再調整這個子樹,使之成爲新的平衡子樹。當失去平衡的最小子樹被調整爲平衡子樹後,無需調整原有其他所有不平衡子樹,整個二叉排序樹就又成爲一棵平衡二叉樹。

  失去平衡的最小子樹是指以離插入結點最近,且平衡因子絕對值大於1的結點作爲根的子樹。假設用A表示失去平衡的最小子樹的根結點,則調整該子樹的操作可歸納爲下列四種情況。

(1)LL型平衡旋轉法

  由於在A的左孩子B的左子樹上插入結點F,使A的平衡因子由1增至2而失去平衡。故需進行一次順時針旋轉操作。即將A的左孩子B向右上旋轉代替A作爲根結點,A向右下旋轉成爲B的右子樹的根結點。而原來B的右子樹則變成A的左子樹。

 

(2)RR型平衡旋轉法

  由於在A的右孩子C 的右子樹上插入結點F,使A的平衡因子由-1減至-2而失去平衡。故需進行一次逆時針旋轉操作。即將A的右孩子C向左上旋轉代替A作爲根結點,A向左下旋轉成爲C的左子樹的根結點。而原來C的左子樹則變成A的右子樹。

 

(3)LR型平衡旋轉法

  由於在A的左孩子B的右子數上插入結點F,使A的平衡因子由1增至2而失去平衡。故需進行兩次旋轉操作(先逆時針,後順時針)。即先將A結點的左孩子B的右子樹的根結點D向左上旋轉提升到B結點的位置,然後再把該D結點向右上旋轉提升到A結點的位置。即先使之成爲LL型,再按LL型處理。

 

如圖中所示,即先將圓圈部分先調整爲平衡樹,然後將其以根結點接到A的左子樹上,此時成爲LL型,再按LL型處理成平衡型。

(4)RL型平衡旋轉法

  由於在A的右孩子C的左子樹上插入結點F,使A的平衡因子由-1減至-2而失去平衡。故需進行兩次旋轉操作(先順時針,後逆時針),即先將A結點的右孩子C的左子樹的根結點D向右上旋轉提升到C結點的位置,然後再把該D結點向左上旋轉提升到A結點的位置。即先使之成爲RR型,再按RR型處理。

 

如圖中所示,即先將圓圈部分先調整爲平衡樹,然後將其以根結點接到A的左子樹上,此時成爲RR型,再按RR型處理成平衡型。

 

方便記憶:LR、RL以<---方向 L爲順時針,R爲逆時針旋轉

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