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

2021-09-27 19:10:44 字數 1907 閱讀 6315

1、二叉排序樹的定義

》 二叉排序樹(簡稱 bst),也稱為「 二叉查詢樹 」。二叉查詢樹或者是一棵空樹,或者是一棵具有下列

特性的非空二叉樹:

a.  若左子樹非空,則左子樹上所有結點關鍵字值均小於根結點的關鍵字值

b.  若右子樹非空,則右子樹上所有結點關鍵子值均大於根結點的關鍵字值

c.  左、右子樹本身也分別是一棵二叉排序樹

》 根據二叉排序樹的定義,有 「  左子樹結點值

進行中序遍歷,可以得到乙個遞增的有序序列。

2、二叉排序樹的查詢

》二叉排序樹的查詢:從根結點開始,沿某乙個分支逐層向下進行比較的過程。若二叉排序樹非空,將給定

值與根結點的關鍵字比較,若相等,則查詢成功;若不等,則當根結點的關鍵字大於給定關鍵字值時,在

根結點的左子樹中查詢,否則在根結點的右子樹中查詢。

3、二叉排序樹的插入

》 二叉排序樹作為一種動態集合,其特點是樹的結構通常不是一次生成的,而是在查詢過程中,當樹中

不存在關鍵字等於給定值的結點時再進行插入。

》  由於二叉排序樹是遞迴定義的,插入結點的過程是:若原二叉排序樹為空,則直接插入結點;否則,

若關鍵字 k 小於根結點關鍵字,則插入到左子樹中,若關鍵字 k 大於根結點關鍵字,則插入到右子樹中。

插入的新結點一定是某個葉子結點

4、二叉排序樹的構造

》 構造一棵二叉排序樹就是依次輸入資料元素,並將它們插入到二叉排序樹中的適當位置上的過程。

具體的過程是,每讀入乙個元素,就建立乙個新結點,若二叉樹排序樹非空,則將新結點的值與根

結點的值比較,如果小於根結點的值,則插入到左子樹中,否則插入到右子樹中;若二叉排序樹為

空,則新結點作為二叉排序樹的根結點。

5、二叉排序樹的刪除

》 在二叉排序樹中刪除乙個結點時,不能把以該結點為根的子樹上的結點都刪除,必須先把被刪除結點

從儲存二叉排序樹的鍊錶上摘下,將因刪除結點而斷開的二叉鍊錶重新鏈結起來,同時確保二叉排序

樹的性質不會丟失。

》 刪除操作的實現過程按 3 種情況來處理:

##  如果被刪除結點  z 是葉結點,則直接刪除,不會破壞二叉排序樹的性質。

##   若結點 z 只有一棵左子樹或者右子樹,則讓 z 的子樹成為 z 父結點的子樹,替代 z 的位置。

##   若結點 z  有左、右兩棵子樹,則令 z 的直接後繼(或者直接前驅)替代 z  ,然後從二叉排序

樹中刪去這個直接後繼(或者直接前驅),這樣就轉換成了第一或者第二種情況。

6、二叉排序樹的查詢效率分析

》 對於高度為  h 的二叉排序樹,其插入和刪除操作的執行時間都是 o( h ) 。但是在最壞情況下,

即構造二叉排序樹的輸入序列是有序的,則會形成乙個傾斜的單支樹,此時二叉排序樹的效能顯著

變壞,樹的高度也增加為元素個數 n 。

二叉排序樹查詢演算法的平均查詢長度,主要取決於樹的高度,即與二叉樹的形態有關。

如果二叉排序樹是乙個只有右(左)孩子的單支樹(類似於有序的單鏈表),其平均查詢長度和

單鏈表相同,為 o( n ) 。如果二叉排序樹的左、右子樹的高度之差的絕對值不超過 1 ,這樣的二叉

排序樹稱為平衡二叉樹。它的平均查詢長度達到 o(

》 就維護表的有序性而言:

### 二叉排序樹

無須移動結點,只需要修改指標即可完成插入和刪除操作,平均時間為o(

###  二分查詢

二分查詢的物件是有序順序表,若有插入和刪除結點的操作,所花的代價是 o( n ) 

###  靜態查詢表

當有序表是靜態查詢表時,宜用順序表作為其儲存結構,而採用二分查詢實現其

查詢操作。

###  動態查詢表

當有序表是動態查詢表時,則應選擇二叉排序樹作為其邏輯結構。

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

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

二叉樹的應用 二叉排序樹 選擇樹 判定樹

這就要提到外部排序了。因為記憶體的空間不足,有時候不能將排序的全部內容都放在記憶體中完成,就像是新學期老師按身高排座位,教室內站不開就要到外面排隊。但計算機還有一些附加條件,比如外面空間有限,所以排身高只能在室內進行,所以呢,人們就將外存中的資料分為幾組,在記憶體中排好了然後合併。這個時候,選擇樹就...

二叉樹的應用 二叉排序樹的刪除

二叉排序樹有兩種刪除結點的思路 del1是非遞迴版,按照思路進行 del2是遞迴版 注意 del3為非遞迴 del4為遞迴 此方法由於可能改變root位置 即在刪除根節點的時候 需要格外注意root需要實際意義上的改變 即直接對root改變 上一種方法只改變了root值,實際並未改變結點位置,所以不...