十三、Mysql之平衡二叉樹(AVL樹)

Hro發表於2018-12-10

1、平衡二叉樹(AVL樹)
  性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹;
  AVL樹如圖:

十三、Mysql之平衡二叉樹(AVL樹)
  非AVL樹如圖:
十三、Mysql之平衡二叉樹(AVL樹)
導致AVL樹失去平衡大致分為4種:
  LL:LeftLeft,也稱“左左”。插入或刪除一個節點後,根節點的左孩子(Left Child)的左孩子(Left Child)還有非空節點,導致根節點的左子樹高度比右子樹高度高2,AVL樹失去平衡。
  RR:RightRight,也稱“右右”。插入或刪除一個節點後,根節點的右孩子(Right Child)的右孩子(Right Child)還有非空節點,導致根節點的右子樹高度比左子樹高度高2,AVL樹失去平衡。
  LR:LeftRight,也稱“左右”。插入或刪除一個節點後,根節點的左孩子(Left Child)的右孩子(Right Child)還有非空節點,導致根節點的左子樹高度比右子樹高度高2,AVL樹失去平衡。
  RL:RightLeft,也稱“右左”。插入或刪除一個節點後,根節點的右孩子(Right Child)的左孩子(Left Child)還有非空節點,導致根節點的右子樹高度比左子樹高度高2,AVL樹失去平衡。


四種失去平衡的情況下對應的旋轉方法:
  LL旋轉步驟:
    1)、舊根節點的左孩子為新根節點,
    2)、舊根節點變為新根節點的右孩子,
    3)、舊根節點的左孩子的右孩子為舊根節點的左孩子

十三、Mysql之平衡二叉樹(AVL樹)
  RR旋轉步驟:
    1)、舊根節點的右孩子為新根節點,
    2)、舊根節點變為新根節點的左孩子,
    3)、舊根節點的右孩子的左孩子為舊根節點的右孩子
十三、Mysql之平衡二叉樹(AVL樹)
  LR旋轉:
    1)、根節點的左孩子進行RR旋轉,
    2)、根節點進行LL旋轉,
十三、Mysql之平衡二叉樹(AVL樹)
  RL旋轉:
    1)、根節點的右孩子進行LL旋轉,
    2)、根節點進行RR旋轉,
十三、Mysql之平衡二叉樹(AVL樹)

相關文章