AVL樹(平衡二叉樹)


        平衡樹(Balance Tree,BT) 指的是,任意節點的子樹的高度差都小於等於1。常見的符合平衡樹的有,B樹(多路平衡搜索樹)、AVL樹(二叉平衡搜索樹)等。平衡樹可以完成集合的一系列操作, 時間復雜度空間復雜度相對於“2-3樹”要低,在完成集合的一系列操作中始終保持平衡,為大型數據庫的組織、索引提供了一條新的途徑 [1] 

        上面提出的任意節點的子樹的高度差都小於等於1,其實就是平衡因子在[-1,1]這個閉合區間內的整數集(-1,0,1)

   平衡因子的計算如下:

 節點的深度是根節點到這個節點的最長路徑上的節點數

 上圖中:

(a) 平衡二叉樹
此節點往下 左子樹深度 - 右子樹深度=平衡因子
5的結點平衡因子就是 3 - 2 = 1;
2的結點平衡因子就是 1 - 2 = -1;
4的結點平衡因子就是 1 - 0 = 1;
6的結點平衡因子就是 0 - 1 = -1;
葉子結點都是為 0;
 
(b)不平衡二叉樹
此節點往下 左子樹深度- 右子樹深度=平衡因子
3 的結點平衡因子就是 2 - 4 = -2;
1 的結點平衡因子就是 0 - 1 = -1;
4 的結點平衡因子就是 0 - 3 = -3;
5 的結點平衡因子就是 0 - 2 = -2;
6 的結點平衡因子就是 0 - 1 = -1;
葉子結點都是為 0;

以上可判斷出任意二叉樹是否是平衡樹

        

添加節點
往平衡二叉樹中添加節點很可能會導致二叉樹失去平衡,所以我們需要在每次插入節點后進行平衡的維護操作。插入節點破壞平衡性有如下四種情況:

LL(右旋)
LL的意思是向左子樹(L)的左孩子(L)中插入新節點后導致不平衡,這種情況下需要右旋操作,而不是說LL的意思是右旋,后面的也是一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM