平衡二叉樹(AVL)

性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,而且左右兩個子樹都是一棵平衡二叉樹。web

 

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

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

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

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

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

    如圖所示爲平衡樹和非平衡樹示意圖:it

  平衡二叉樹算法思想:form

     若向平衡二叉樹中插入一個新結點後破壞了平衡二叉樹的平衡性。  import

    (1LL型平衡旋轉法transform

 

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

    (2RR型平衡旋轉法

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

    (3LR型平衡旋轉法

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

 

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

 

    (4RL型平衡旋轉法  

 

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

 

 

 

 

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

  總結:若是從空樹開始創建,並時刻保持平衡,那麼不平衡只會發生在插入刪除操做上,而不平衡的標誌就是出現bf == 2或者 bf == -2的節點。

相關文章
相關標籤/搜索