二叉搜索樹之—AVL

搜索樹:
搜索樹:又叫二叉排序樹,他是一顆空樹,或者具有以下幾個特性:
1、若它的左子樹不爲空,則左子樹上所有節點的值都小於根節點的值
2、若它的右子樹不爲空,則右子樹上所有節點的值都大於根節點的值
3、它的左右子樹也分別爲二叉搜索樹
索搜結構之AVL樹:
AVL樹:一棵AVL樹或者是空樹,或者是具有以下性質的二叉搜索樹:
1、它的左右子樹都是AVL樹
2、左子樹和右子樹高度之差(簡稱平衡因子)的絕對值不超過1(-1、0、1)
AVL樹:表示方法:
每個節點,添加一個標識左右子樹高度差的 int型 變量
pV = 左子樹的高度 — 右子樹的高度
每次插入節點後,改變插入點的pV,逐層向上改變,
PS:所有的例子中的平衡因子都是用 左子樹的高度減去右子樹的高度
1、在左邊添加節點,雙親節點自加一:

2、在右邊添加節點,雙親節點自減一:

在AVL樹中插入一個節點有4種情況:
1、在較高的左子樹的左邊添加節點 即:節點高度差爲2,子節點高度差爲1

這種情況:我們利用右單旋轉:當我們在向上調整df,遇到-2時,需要調整,將爲-2節點(即:20)的左子樹向上提升,如下圖:

2、在較高的右子樹的右邊添加節點:即:節點高度差爲-2,子樹高度差爲-1

3、在較高左子樹,的右邊添加節點 即:節點高度差爲2,子樹節點高度差爲-1

這種情況我們應該先將子樹(20往下)的進行左單旋,則變成了 2 1 的情況了:

然後調用右單旋

即可完成平衡。
4、較高右子樹的, 左邊添加節點,在根樹高度差爲-2, 右子樹高度差爲1;
1、我們需要先將右子樹進行右單旋,則情況又轉變爲-2 -1的情況,:

2、再對根樹,進行左單旋:


總結:PS:平衡因子以右子樹高度減去左子樹高度
pParent平衡因子 pCur平衡因子 情況 處理方法
2 1 1、在較高右子樹,的右邊插入 直接對pParent進行左旋
2 -1 2、在較高右子樹,的左邊插入 先對pCur進行右旋,變爲情況1
-2 -1 3、在較高左子樹,的左邊插入 直接對pParent進行右旋
-2 1 4、在較高左子樹,的右邊插入 先對pCur進行左旋,變爲情況3
在每一種情況處理完成之後,需要根據情況,對pCur、pParent、pCur->left/pCur->right 的平衡因子進行修正。


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章