1. 程式人生 > >Land is there, but I will build another Land

Land is there, but I will build another Land

1、預備知識

定義樹(tree)的一種自然的方式是遞迴的方式。一棵樹使一些節點的集合。這個集合可以是空集;若不是空集,則樹由稱作根(root)的節點 r 以及 0 個或多個非空的(子)樹 T1,T2,T3,…,Tk 組成。這些子樹每一顆的根都被來自根 r 的一條有向的邊所連結。

每一顆子樹的根叫做根 r 的兒子(child),而根 r 是每一顆子樹的根的父親(parent)。沒有兒子的根叫做樹葉(leaf)

平衡二叉樹的初始高度為 -1,它保證輸的深度為 O(logN)。一顆 AVL 樹必須滿足其每個節點的左子樹和右子樹的高度差 <= 1。

2、不平衡的狀況

假設一顆 AVL 樹的某個節點為 r,有四種操作會使 r 的左右子樹高度差大於 1,從而破壞了原有 AVL 樹的平衡性。

  1. 對 r 的左兒子的左子樹進行一次插入(LL)
  2. 對 r 的左兒子的右子樹進行一次插入(LR)
  3. 對 r 的右兒子的左子樹進行一次插入(RL)
  4. 對 r 的右兒子的右子樹進行一次插入(RR)

其中 1、4 可以歸為一類,2、3 可以歸為一類。1、4 進行單旋轉平衡,2、3 進行雙旋轉平衡。

3、旋轉方法

①左旋轉(LL)

這裡寫圖片描述

②左右雙旋轉(LR)

這裡寫圖片描述

③右左雙旋轉(RL)

這裡寫圖片描述

④右旋轉(RR)

這裡寫圖片描述