二叉樹(四) 二叉排序樹

2021-09-11 02:07:09 字數 2887 閱讀 5579

二叉排序樹或者非空二叉樹,或者為具有以下性質的二叉樹:

1、若根結點的左子樹不空,則左子樹上所有結點的值都小於根結點的值;

2、若根結點的右子樹不空,則右子樹上所有結點的值都大於或者等於根結點的值;

每一棵子樹分別也是二叉排序樹

上述定義為遞迴定義

如下圖:

該二叉樹的中序序列如下:

10, 30, 35, 38, 40, 50, 50, 58, 60, 64, 70, 73, 100

我們發現二叉排序樹的中序序列從小到大遞增

逐點插入法

設k=( k1,k2,k3, …, kn)為具有n 個資料元素的序列。從序列的第乙個元素開始,依次取序列中的元素,每取乙個元素ki,按照下述原則將ki 插入到二叉樹中:

1、若二叉樹為空,則ki 作為該二叉樹的根結點;

2、若二叉樹非空,則將ki 與該二叉樹的根結點的值進行比較;若ki 小於根結點的值,則將ki插入到根結點的左子樹中:否則,將ki 插入到根結點的右子樹中。

3、將ki 插入到左子樹或者右子樹中仍然遵循上述原則

建立二叉排序樹的(主)演算法

建立二叉排序樹的(主)演算法的c語言實現如下:

btree sorttree

(datatype k,

int n)

主演算法很簡單,迴圈呼叫每個節點的插入演算法。其中,插入乙個節點的非遞迴演算法如下:

#define sizeof(btnode) len

void

insertbst

(btree &t, typedata item)

else

q=q->lchild;

else

if(q->rchild==

null

)else

q=q->rchild;

}}

二叉排序樹的刪除原則如下:

1、被刪除結點為葉結點,則直接刪除;

2、被刪除結點無左子樹,則用右子樹的根結點取代被刪除結點;

3、被刪除結點無右子樹,則用左子樹的根結點取代被刪除結點;

4、被刪除結點的左、右子樹都存在,則用被刪除結點的右子樹中值最小的結點(或被刪除結點的左子樹中值最大的結點)取代被刪除結點。

二叉排序樹的查詢過程

二叉排序樹的查詢過程如下:

若二叉排序樹為空,則查詢失敗,結束。

若二叉排序樹非空,則將被查詢元素與二叉排序樹的根結點的值進行比較,

1、若等於根結點的值,則查詢成功,返回被查到元素所在鏈結點的位址,查詢結束;

2、若小於根結點的值,則到根結點的左子樹中重複上述查詢過程;

3、若大於根結點的值,則到根結點的右子樹中重複上述查詢過程;

直到查詢成功或者失敗。

該過程是乙個遞迴過程;由於查詢過程和插入過程很相像,所以二叉排序樹也叫二叉查詢樹。

查詢演算法

二叉排序樹的查詢演算法如上所述,該演算法可以使用遞迴實現,也可以不使用。

遞迴實現查詢演算法

btree sortsearch2

( btree t, datatype key )

else

return

null

;// 查詢失敗

}

遞迴演算法易於理解,但是效率較低。

非遞迴實現查詢演算法

btree sortsearch1

(btree t,datatype key)

return

null

;//查詢失敗

}

非遞迴演算法不易於理解,但是效率較高。

查詢效率

二叉排序樹的查詢效率可以用平均查詢長度asl來評估

asl定義如下:

平均查詢長度asl—— 確定乙個元素在樹中位置所需要進行的元素間的比較次數的期望值(平均值),計算公式如下:

其中:1、n表示二叉樹中結點的總數;

2、pi表示查詢第i個元素的概率;

3、ci表示查詢第i個元素需要進行的元素之間的比較次數。

以如下二叉排序樹為例,其asl計算過程如下:

asl的計算方法如下:

第一層元素個數 *1 + 第二層元素個數 *2 + 第三層元素個數 *3+……+第n層元素個數 *n 。

可以利用二叉樹的按層遍歷,然而將每層的元素個數乘以第幾層。

注:如果被插入的元素序列是隨機序列,或者序列的長度較小,採用逐點插入法建立二叉排序樹可以接受。如果建立的二叉排序樹**現結點子樹的深度之差較大時(即產生不平衡),就有必要採用其他方法建立二叉排序樹,即建立所謂「平衡二叉樹」。

比較理想的情況下,二叉排序樹查詢的時間複雜度為o(log2n),當出現「退化二叉樹」時,時間複雜度為o(n)

二叉樹,完全二叉樹,滿二叉樹,二叉排序樹

二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。完全二叉樹 除最後一層外,每一層上的結點數均達到最大值 在最後一層上只缺少右邊的若干結點 樹中所含的n個節點和滿二叉樹中編號...

二叉樹 四 二叉查詢樹 BST

二叉查詢樹 對於二叉查詢樹的任何乙個節點,設這個節點的值為k,這個節點的左子樹的任意乙個節點的值都小於k,右子樹的任何乙個節點的值都大於等於k。對於任何的二叉查詢樹,使用中序遍歷 左根右 可以將值從小到大列印出來。對於二叉查詢樹的檢索,例如圖a,需要檢索32,那麼首先需要檢索根節點,發現37大於32...

樹與二叉樹的應用 二叉排序樹

1 二叉排序樹的定義 二叉排序樹 簡稱 bst 也稱為 二叉查詢樹 二叉查詢樹或者是一棵空樹,或者是一棵具有下列 特性的非空二叉樹 a.若左子樹非空,則左子樹上所有結點關鍵字值均小於根結點的關鍵字值 b.若右子樹非空,則右子樹上所有結點關鍵子值均大於根結點的關鍵字值 c.左 右子樹本身也分別是一棵二...