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值,實際並未改變結點位置,所以不...