平衡二叉搜索樹【AVL樹】

先了解下 「平衡因子」:

平衡因子是某節點的左右子樹的高度差。以下圖,紅字數字就是每一個節點的平衡因子
imagespa

再次注意:節點下的紅色數字表示的是 當前 節點的平衡因子
AVL樹的特色:
  • 每一個節點的平衡因子只多是10-1(絕對值<=1,若是超過1,稱之爲"失衡")
  • 每一個節點的左右子樹高度差不超過1
  • 搜索、添加、刪除的時間複雜度是O(logn)

以下圖所示:
imagecode

平衡對比

假設輸入數據:35, 37, 34, 56, 25, 62, 57, 9, 74, 32, 94, 80, 75, 100, 16, 82
imageblog

很明顯,AVL樹比普通二叉搜索樹的高度要小,平衡因子只多是 10-1
處理添加節點致使的失衡
  • LL-右旋轉(單旋轉)

image

LL 表示的是失衡的左邊的左邊添加的節點。上圖所示,在 n節點添加節點後,致使 g節點失衡了, n節點g節點的左子樹的左子樹中,用 LL表示,此時將失衡節點 g進行 右旋轉就恢復平衡了。以下圖所示:

image

(1): g.left = p.right,(2): p.right=g,(3)讓 p節點成爲這顆子樹的根節點
  • RR-左旋轉(單旋)

image

RR表示的是失衡節點的右邊的右邊添加的節點。如上圖所示,在 n節點再添加一個節點,致使的 g節點失衡,而 n節點g節點的右子樹的右子樹中,用 RR表示,此時將失衡節點 g進行 左旋轉就能恢復平衡了,以下圖所示:

image

  • LR-RR左旋轉,LL右旋轉(雙旋)

image

LR- RR 表示的是失衡節點的左邊,而後右邊添加了一個節點。如上圖所示,在 n節點處添加了一個節點,致使了 g節點失衡,而 n節點在 g節點的左子樹的右子樹中,就用 LR- RR表示。此時須要先對 p節點進行左旋轉,再對 g節點進行右旋轉就能恢復平衡了。
image
  • RL-LL右旋轉,RR左旋轉(雙旋)

image

RL- LL表示的是在失衡節點的右子樹的左子樹上的節點添加了一個節點致使的失衡,如上圖所示,在 n節點添加一個節點,致使 g節點失衡,此時 n節點g節點的右子樹節點的左子樹中,此時先對 p節點進行右旋轉,而後再對 g節點進行左旋轉就能恢復平衡了

image

相關文章
相關標籤/搜索