理论基础 —— 查找 —— 平衡二叉树
【概述】
二叉排序樹的查找效率取決于二叉排序樹的形態,而構造一棵形態均勻的二叉排序樹與結點的插入次序有關,但結點的插入次序不是隨人的意志決定的,這就要求我們找到一種動態平衡的方法,對于任意給定的關鍵碼序列都能構造一科形態均勻、平衡的二叉排序樹。
平衡二叉樹(Balance Binary Tree)又稱 AVL 樹,其本質是一種高度平衡的二叉排序樹,其或是一棵空的二叉排序樹,或是滿足以下性質的二叉排序樹:
- 根結點的左子樹和右子樹深度最多相差 1
- 根結點的左子樹和右子樹也是平衡二叉樹
根據平衡二叉樹的定義,將某個結點的左子樹的深度與右子樹的深度之差稱為平衡因子(Balance Factor),將在平衡二叉樹構造過程中,以距離插入結點最近的、且平衡因子絕對值大于 1 的結點為根的子樹稱為最小不平衡子樹(Minimal Unbalance SubTree)
【平衡二叉樹的構造】
構造平衡二叉樹的基本思想是:在構造二叉排序樹的過程中,每插入一個結點時,首先檢查是否因結點插入而破壞了樹的平衡性,若是,則找出最小不平衡子樹,在保持二叉排序樹的特性前提下,調整最小不平衡子樹中各結點的位置,進行相應旋轉,使其成為新的平衡子樹。
設結點 A 為最小平衡樹的根結點,對該子樹進行平衡調整歸納起來有以下四種情況:
1.LL 型
當新插入的結點是插在結點 A 的左孩子的左子樹上,即為 LL 型。
設結點 B 是結點 A 的左子樹的根結點,Bl、Br 分別為結點 B 的左右子樹,Ar 為結點 A 的右子樹,且 Bl、Br、Ar 三棵子樹的深度均為 h,將結點 x 插入到結點 B 的左子樹 Bl 上,導致結點 A 的平衡因子由 1 變為 2,使得以結點 A 為根的子樹失去了平衡,如下圖:
將支撐點由 A 改為 B,相應的進行順時針旋轉,旋轉后,結點 A 及其右子樹 Ar 和結點 B 的右子樹?Br 發生沖突,按旋轉優先原則,結點 A 成為 B 的右孩子結點,結點 B 的右子樹 Br 成為結點 A 的左子樹,如下圖:
2.RR 型
當新插入的結點是插在結點 A 的右孩子的右子樹上,即為 RR?型。
設結點 B 是結點 A 的右子樹的根結點,Bl、Br 分別為結點 B 的左右子樹,Al?為結點 A 的左子樹,且 Bl、Br、Ar 三棵子樹的深度均為 h,將結點 x 插入到結點 B 的右子樹 Br?上,導致結點 A 的平衡因子由 -1?變為 -2,使得以結點 A 為根的子樹失去了平衡,如下圖:
將支撐點由 A 改為 B,相應的進行逆時針旋轉,旋轉后,結點 A 及其左子樹 Al?和結點 B 的左子樹?Bl?發生沖突,按旋轉優先原則,結點 A 成為 B 的左孩子結點,結點 B 的左子樹 Bl?成為結點 A 的右子樹,如下圖:
3.LR 型
當新插入的結點是插在結點 A 的左孩子的右子樹上,即為 LR?型。
設結點 B 是結點 A 的左子樹的根結點,結點 C 是結點 B 的右子樹的根節點,Ar?為結點 A 的右子樹,Bl?為結點 B 的左子樹,Cl、Cr 分別為結點 C 的左右子樹,且 Bl、Ar 兩棵子樹的深度為 h,Cl、Cr 兩棵子樹的深度為 h-1,將結點 x 插入到結點 C?的左子樹 Cl?上,導致結點 A 的平衡因子由 1?變為 2,使得以結點 A 為根的子樹失去了平衡,如下圖:
對于 LR 型,需旋轉兩次:
1)第一次旋轉:根節點 A 不動,調整結點 A 的左子樹,將支撐點由結點 B 調整到結點 C 處,相應的進行逆時針旋轉,旋轉后,結點 B 及其左子樹與結點 C 的左子樹 Cl 發生沖突,按旋轉優先原則,結點 C 的左子樹成為 B 的右子樹,如下圖:
2)第二次旋轉:將支撐點由結點 A 調整到結點 C,?相應的進行順時針旋轉,旋轉后,結點 A 及其右子樹 Ar 與結點 C 的右子樹 Cr 發生沖突,按旋轉優先原則,結點 C 的右子樹成為結點 A 的左子樹,如下圖:
4.RL 型
當新插入的結點是插在結點 A 的右孩子的左子樹上,即為 RL 型。
設結點 B 是結點 A 的右子樹的根結點,結點 C 是結點 B 的左子樹的根節點,Al?為結點 A 的左子樹,Br?為結點 B 的右子樹,Cl、Cr 分別為結點 C 的左右子樹,且 Br、Al?兩棵子樹的深度為 h,Cl、Cr 兩棵子樹的深度為 h-1,將結點 x 插入到結點 C?的右子樹 Cr?上,導致結點 A 的平衡因子由 -1?變為 -2,使得以結點 A 為根的子樹失去了平衡,如下圖:
對于 RL 型,需旋轉兩次:
1)第一次旋轉:根節點 A 不動,調整結點 A 的右子樹,將支撐點由結點 B?調整到結點 C 處,相應的進行順時針旋轉,旋轉后,結點 B 及其右子樹與結點 C 的右子樹 Cr?發生沖突,按旋轉優先原則,結點 C 的右子樹成為 B 的左子樹,如下圖:
2)第二次旋轉:將支撐點由結點 A 調整到結點 C,?相應的進行逆時針旋轉,旋轉后,結點 A 及其左子樹 Al?與結點 C 的左子樹 Cl?發生沖突,按旋轉優先原則,結點 C 的左子樹成為結點 A 的右子樹,如下圖:
?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的理论基础 —— 查找 —— 平衡二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图论 —— 网络流 —— 最大流 ——
- 下一篇: 魔板(洛谷-P2730)