1. 程式人生 > >二叉排序樹(B樹)和平衡樹(AVL樹)

二叉排序樹(B樹)和平衡樹(AVL樹)

  二叉排序樹,也稱B樹,是查詢演算法中比較常提到的一種資料結構,本文介紹其基本概念和查詢過程,並分析其查詢效率,進而引出了平衡樹(AVL樹)的概念。

B樹的結構

  B樹即為二叉搜尋樹或稱二叉排序樹Binary Sort Tree),也有叫二叉查詢樹的。

  它或者是一棵空樹,或者是具有下列性質的二叉樹:

  1.若它的左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值;

  2.若它的右子樹不為空,則右子樹上所有結點的值均大於它的根結點的值;

  3.它的左右子樹也分別為二叉排序樹。

  中序遍歷二叉排序樹可以得到一個有序序列。

在二叉排序樹上查詢

  首先將給定值和根結點的關鍵字比較,若相等,則查詢成功,若不相等,則根據給定值和根結點關鍵字之間的大小關係,在左子樹或右子樹上繼續進行查詢。

  若查到為空樹時,說明該樹中沒有待查記錄,故查詢不成功。

二叉排序樹的查詢分析

  在二叉排序樹上查詢其關鍵字等於給定值的結點的過程,恰是走了一條從根結點到該結點的路徑的過程,和給定值比較的關鍵字個數等於路徑長度加1(或結點所在層次數),    因此,和折半查詢類似,與給定值比較的關鍵字個數不超過樹的深度。

  然而,折半查詢長度為n的表的判定樹是唯一的,而含有n個結點的二叉排序樹卻不唯一。

  含有n個結點的二叉排序樹的平均查詢長度和樹的形態有關,當先後插入的關鍵字有序時,構成的二叉排序樹蛻變為單支樹。

  這時樹的深度為n,其平均查詢長度為(n+1)/2,和順序查詢相同,這是最差的情況。

  顯然,最好的情況應該是二叉排序樹的形態和折半查詢的判定樹相同,其平均查詢長度和log2n成正比,即我們希望二叉排序樹是平衡的

平衡二叉樹

  平衡二叉樹Balanced Binary TreeHeight-Balanced Tree)又稱AVL樹

  它或者是一棵空樹,或者是具有下列性質的二叉樹:

  它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1

  若將二叉樹上結點的平衡因子BF(Balance Factor)定義為該結點的左子樹深度減去它的右子樹的深度,則平衡二叉樹上所有結點的平衡因子只可能是-1,0和1.

  在平衡樹上進行查詢的時間複雜度為O(logn)。