二叉排序樹(B樹)和平衡樹(AVL樹)
二叉排序樹,也稱B樹,是查詢演算法中比較常提到的一種資料結構,本文介紹其基本概念和查詢過程,並分析其查詢效率,進而引出了平衡樹(AVL樹)的概念。
B樹的結構
B樹即為二叉搜尋樹或稱二叉排序樹(Binary Sort Tree),也有叫二叉查詢樹的。
它或者是一棵空樹,或者是具有下列性質的二叉樹:
1.若它的左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值;
2.若它的右子樹不為空,則右子樹上所有結點的值均大於它的根結點的值;
3.它的左右子樹也分別為二叉排序樹。
中序遍歷二叉排序樹可以得到一個有序序列。
在二叉排序樹上查詢
首先將給定值和根結點的關鍵字比較,若相等,則查詢成功,若不相等,則根據給定值和根結點關鍵字之間的大小關係,在左子樹或右子樹上繼續進行查詢。
若查到為空樹時,說明該樹中沒有待查記錄,故查詢不成功。
二叉排序樹的查詢分析
在二叉排序樹上查詢其關鍵字等於給定值的結點的過程,恰是走了一條從根結點到該結點的路徑的過程,和給定值比較的關鍵字個數等於路徑長度加1(或結點所在層次數), 因此,和折半查詢類似,與給定值比較的關鍵字個數不超過樹的深度。
然而,折半查詢長度為n的表的判定樹是唯一的,而含有n個結點的二叉排序樹卻不唯一。
含有n個結點的二叉排序樹的平均查詢長度和樹的形態有關,當先後插入的關鍵字有序時,構成的二叉排序樹蛻變為單支樹。
這時樹的深度為n,其平均查詢長度為(n+1)/2,和順序查詢相同,這是最差的情況。
顯然,最好的情況應該是二叉排序樹的形態和折半查詢的判定樹相同,其平均查詢長度和log2n成正比,即我們希望二叉排序樹是平衡的。
平衡二叉樹
平衡二叉樹(Balanced Binary Tree或 Height-Balanced Tree)又稱AVL樹。
它或者是一棵空樹,或者是具有下列性質的二叉樹:
它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1。
若將二叉樹上結點的平衡因子BF(Balance Factor)定義為該結點的左子樹深度減去它的右子樹的深度,則平衡二叉樹上所有結點的平衡因子只可能是-1,0和1.
在平衡樹上進行查詢的時間複雜度為O(logn)。