二叉搜尋樹(\(binary\ search\ tree\)),簡稱\(bst\),用於在乙個集合中查詢元素。
若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值
若它的右子樹不為空,則右子樹上所有節點的值都大於根節點的值
它的左右子樹也分別為二叉搜尋樹
1、插入
操作內容:
將乙個元素插入二叉搜尋樹。
操作方法:
將乙個元素插入乙個二叉搜尋樹,需要將插入元素與當前節點元素進行比較:
若插入元素等於當前節點元素,則說明已插入過該元素,退出函式。
若插入元素小於當前節點元素,如果當前節點左子樹為空,則將該節點左子樹定為當前插入元素,否則,繼續對當前節點的左子樹進行操作。
類似的,若插入元素大於當前節點元素,如果當前節點右子樹為空,則將該節點右子樹定為當前插入元素,否則,繼續對當前節點的右子樹進行操作。
**如下:
void insert(bst *&x,int v)
if(v==x->num) return;//若已插入過,則退出函式
if(vnum) insert(x->left,v);//若插入元素小於當前節點元素,則繼續對當前節點的左子樹進行操作
else insert(x->right,v);//反之,繼續對當前節點的右子樹進行操作
}
2、查詢
操作內容:
查詢乙個元素是否在二叉搜尋樹中。
操作方法:
查詢乙個元素是否在二叉搜尋樹中,需要將查詢元素與當前節點元素進行比較:
若查詢元素等於當前節點元素,則返回1。
若查詢元素小於當前節點元素,如果當前節點左子樹為空,則返回0,否則,繼續對當前節點的左子樹進行操作。
類似的,若查詢元素大於當前節點元素,如果當前節點右子樹為空,則返回0,否則,繼續對當前節點的右子樹進行操作。
**如下:
int query(bst *x,int v)
3、刪除
操作內容:
刪除二叉搜尋樹中的乙個元素。
操作方法:
刪除二叉搜尋樹中的乙個元素,需要將刪除元素與當前節點元素進行比較:
若刪除元素等於當前節點元素,如果當前節點無子樹,則將當前節點設定為空,否則,將當前節點設定為當前節點的乙個子樹,操作完後退出函式。
若刪除元素小於當前節點元素,如果當前節點左子樹為空,則退出函式,否則,繼續對當前節點的左子樹進行操作。
類似的,若刪除元素大於當前節點元素,如果當前節點右子樹為空,則退出函式,否則,繼續對當前節點的右子樹進行操作。
具體**如下:
void delete(bst *&x,int v)
//刪除當前節點
if(vnum) delete(x->left,v);
else delete(x->right,v);
}
#include#define n 1000
using namespace std;
int q;
struct bst
*rt=null;
void insert(bst *&x,int v)
if(v==x->num) return;//若已插入過,則退出函式
if(vnum) insert(x->left,v);//若插入元素小於當前節點元素,則繼續對當前節點的左子樹進行操作
else insert(x->right,v);//反之,繼續對當前節點的右子樹進行操作
}int query(bst *x,int v)
void delete(bst *&x,int v)
//刪除當前節點
if(vnum) delete(x->left,v);
else delete(x->right,v);
}int main()
return 0;
}
二叉搜尋樹BST
在二叉搜尋樹b中查詢x的過程為 1.若b是空樹,則搜尋失敗,否則 2.若x等於b的根結點的資料域之值,則查詢成功 否則 3.若x小於b的根結點的資料域之值,則搜尋左子樹 否則 4.查詢右子樹 指標parent指向proot的父節點,其初始呼叫值為null 若查詢成功,指標ptarget指向目標節點,...
二叉搜尋樹(BST)
二叉搜尋樹 bst bst 或者是一棵空樹,或者對於任何乙個結點,設其值為k,則該結點的左子樹的值小於k,右結點的值大於k。二叉搜尋樹按照中根遍歷將各個結點列印,將得到按照大到小的順序排列。bsg示意圖 二叉搜尋樹的效率在於檢索,將演算法複雜度從2 k減少到log n 檢索方式 從根結點開始,如果等...
BST二叉搜尋樹
深入學習理解bst include using namespace std typedef struct bitnodebitnode,bitree 二叉樹的插入操作 void insert bitnode root,int x 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...