遞迴定義
標頭檔案實現檔案
1. 結構體定義
2. 查詢函式
3. 查詢關鍵值最小的結點
4. 查詢關鍵值最大的結點
5. 插入函式
6. 刪除函式
7. 其他函式(makeempty,retrive)
二叉查詢樹(binary search tree, bst),在不同的書上我發現也可以叫二叉搜尋樹,二叉排序樹。
二叉樹的乙個重要應用就是在查詢中的應用,現在我們來遞迴地定義乙個二叉查詢樹:
因為二叉查詢樹是遞迴定義的,所以它的例程也是遞迴實現的。
#ifndef searchtree_h_included
#define searchtree_h_included
typedef
int elementtype;
struct treende;
typedef
struct treenode *position;
typedef
struct treenode *searchtree;
searchtree makeempty
( searchtree t )
;position find
( elementtype x, searchtree t )
;//根據關鍵字值查詢節點位址
position findmin
( searchtree t )
;//查詢最小的節點
position findmax
( searchtree t )
;//查詢最大的節點
searchtree insert
( elementtype x, searchtree t )
;searchtree delete
( elementtype x, searchtree t )
;elementtype retrieve
( position p )
;//返回節點的關鍵字值
#endif
// searchtree_h_included
結構體定義
struct treenode
;
查詢函式
從根結點開始,將給定值與根結點的關鍵字比較,如果大於關鍵字,那麼所查詢的結點一定在右子樹,小於關鍵字在左子樹。
position find
(elementtype x,searchtree t)
查詢值最小的節點
關鍵字值最小的節點一定在樹的最左側。
position findmin
(searchtree t)
查詢值最大的節點
關鍵字值最大的節點在樹的最右側。
position findmax
(searchtree t)
插入函式
插入乙個結點時,首先沿著樹查詢,如果樹中含有具有該關鍵字的結點,那麼就什麼都不做,如果遍歷到樹的葉子節點的左/右子樹時還未找到要插入的關鍵字,就在該結點處插入乙個新的結點。
searchtree insert
(elementtype x,searchtree t)
}else
return t;
}
刪除函式
刪除的操作比較複雜,要考慮幾種不同的情況:
設p為要刪除的結點
若p為葉子結點,直接刪除
若p只有乙個子樹,則用子樹的根節點替代p
若p有兩個子樹,情況就比較複雜,可以採取的方法有兩種:
1.複製刪除
2. 合併刪除
複製刪除:找到右子樹中關鍵值最小的結點q,替代p,然後刪除q。顯然q沒有左子樹,所以q的刪除是很簡單的。當然也可以使用左子樹中關鍵值最大的結點
合併刪除:使p的左子樹稱為p的右子樹中關鍵值最小的結點的左子樹,再使p的左子樹為空
這裡我給出複製刪除的**:
searchtree delete
(elementtype x, searchtree t)
else
return t;
}
其他函式實現
searchtree makeempty
(searchtree t)
return
null;}
elementtype retrieve
(position p)
二叉查詢樹 C
include stdafx.h include using namespace std 二叉查詢樹的性質 1.二叉排序樹或為空樹 2.若左子樹不為空,則左子樹中所有節點的值均小於或等於根節點 3.若右子樹不為空,則右子樹中所有節點的值均大於或等於跟節點 4.左右子樹也為二叉排序樹 5.二叉排序樹採...
C 二叉查詢樹
二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點...
二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...