平衡二叉樹

前面我寫了一篇二叉排序樹,最後我們提到提高二叉排序樹的查找效率是讓二叉樹的形狀均衡,所以就引入了平衡二叉樹。

特點:

  • 一種特殊類型的二叉排序樹

  • 所有結點的左、右子樹深度之差的絕對值≤1

  • 左右子樹是平衡二叉樹;

平衡因子:該結點左子樹和右子數的高度差

任意一個結點的平衡因子只能取:-1、0或1;如果樹中任意一個結點的平衡因子的絕對值大於1,則這棵二叉樹就失去平衡,不再是AVL樹;

對於一棵有n個結點的AVL樹,其高度保持在O(log2n)數量級,ASL也保持在O(log2n)量級。

這裏寫圖片描述

如果在一棵AVL樹中插入一個新結點,就有可能造成失衡,此時必須重新調整樹的結構,使之恢復平衡。我們稱調整平衡過程爲平衡旋轉

調整方法:找到最小不平衡子樹,可將重新平衡的範圍侷限於這棵子樹,在保持二叉排序樹特性的前提下,調整最小不平衡子樹中各個結點之間的鏈接關係,進行相應的旋轉,使之成爲新的平衡子樹。

最小不平衡子樹:離插入結點最近且平衡因子絕對值超過1的祖先結點,以該結點爲根的子樹稱爲最小不平衡子樹。

假設最小不平衡子樹的根結點爲A,則失去平衡後進行調整的規律可歸納爲以下四種情況。

  • LL平衡旋轉

  • RR平衡旋轉

  • LR平衡旋轉

  • RL平衡旋轉

1)LL平衡旋轉:

若在A的左子樹的左子樹插入結點,使A的平衡因子從1增加到2,需要進行一次向右順時針旋轉(以B爲旋轉軸)
這裏寫圖片描述

這裏寫圖片描述

2)RR平衡旋轉:

若在A的右子樹上插入結點,使A的平衡因子從-1
增加至-2,需要進行一次逆時針旋轉(以B爲旋轉軸)

這裏寫圖片描述

這裏寫圖片描述

3)LR平衡旋轉:

若在A的左子樹的右子樹上插入結點,使A的平衡因子從1增加到2,需要先進行逆時針旋轉,再順時針旋轉。(以插入的結點C爲旋轉軸)
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

4)RL平衡旋轉:

若在A的 右子樹的左子樹上插入結點,使A的平衡因子從-1增加到-2,則需要先進行順時針旋轉,再進行逆時針旋轉。(以插入的結點C爲旋轉軸)
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

發佈了134 篇原創文章 · 獲贊 184 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章