AVL樹的旋轉

      平衡二叉樹在進行插入操作的時候可能出現不平衡的情況,AVL樹即是一種自平衡的二叉樹,它通過旋轉不平衡的節點來使二叉樹重新保持平衡,並且查找、插入和刪除操作在平均和最壞情況下時間複雜度都是O(log n)

 

      AVL樹的旋轉一共有四種情形,注意所有旋轉情況都是圍繞着使得二叉樹不平衡的第一個節點展開的。

 

1. LL型

    平衡二叉樹某一節點的左孩子的左子樹上插入一個新的節點,使得該節點不再平衡。這時只需要把樹向右旋轉一次即可,如圖所示,原A的左孩子B變爲父結點,A變爲其右孩子,而原B的右子樹變爲A的左子樹,注意旋轉之後Brh是A的左子樹(圖上忘在A於Brh之間標實線)

 

 


2. RR型

    平衡二叉樹某一節點的右孩子的右子樹上插入一個新的節點,使得該節點不再平衡。這時只需要把樹向左旋轉一次即可,如圖所示,原A右孩子B變爲父結點,A變爲其左孩子,而原B的左子樹Blh將變爲A的右子樹。

 

 

3. LR型

      平衡二叉樹某一節點的左孩子的右子樹上插入一個新的節點,使得該節點不再平衡。這時需要旋轉兩次,僅一次的旋轉是不能夠使二叉樹再次平衡。如圖所示,在B節點按照RR型向左旋轉一次之後,二叉樹在A節點仍然不能保持平衡,這時還需要再向右旋轉一次。

 

 

4. RL型

      平衡二叉樹某一節點的右孩子的左子樹上插入一個新的節點,使得該節點不再平衡。同樣,這時需要旋轉兩次,旋轉方向剛好同LR型相反。

 

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