平衡因子是某節點的左右子樹的高度差。以下圖,紅字數字就是每一個節點的平衡因子
spa
再次注意:節點下的紅色數字表示的是 當前
節點的平衡因子
1
、0
、-1
(絕對值<=1,若是超過1
,稱之爲"失衡")O(logn)
以下圖所示:
code
假設輸入數據:35, 37, 34, 56, 25, 62, 57, 9, 74, 32, 94, 80, 75, 100, 16, 82
blog
很明顯,AVL樹比普通二叉搜索樹的高度要小,平衡因子只多是1
、0
、-1
LL
-右旋轉
(單旋轉)
LL
表示的是失衡的左邊的左邊添加的節點。上圖所示,在n
節點添加節點後,致使g節點
失衡了,n節點
在g節點
的左子樹的左子樹中,用LL
表示,此時將失衡節點g
進行右旋轉
就恢復平衡了。以下圖所示:
(1):g.left = p.right
,(2):p.right=g
,(3)讓p節點
成爲這顆子樹的根節點
RR
-左旋轉
(單旋)
RR
表示的是失衡節點的右邊的右邊添加的節點。如上圖所示,在n
節點再添加一個節點,致使的g
節點失衡,而n節點
在g節點
的右子樹的右子樹中,用RR
表示,此時將失衡節點g
進行左旋轉
就能恢復平衡了,以下圖所示:
LR
-RR
左旋轉,LL
右旋轉(雙旋)
LR
-RR
表示的是失衡節點的左邊,而後右邊添加了一個節點。如上圖所示,在n節點
處添加了一個節點,致使了g節點
失衡,而n
節點在g
節點的左子樹的右子樹中,就用LR
-RR
表示。此時須要先對p節點
進行左旋轉,再對g節點
進行右旋轉就能恢復平衡了。
RL
-LL
右旋轉,RR
左旋轉(雙旋)
RL
-LL
表示的是在失衡節點的右子樹的左子樹上的節點添加了一個節點致使的失衡,如上圖所示,在n節點
添加一個節點,致使g節點
失衡,此時n節點
在g節點
的右子樹節點的左子樹中,此時先對p節點
進行右旋轉,而後再對g
節點進行左旋轉就能恢復平衡了