二叉排序樹(binary sort tree),又稱二叉查詢樹(binary search tree),亦稱二叉搜尋樹。
二叉排序樹的性質:左子樹上所有結點的值均小於或等於它的根結點的值;右子樹上所有結點的值均大於或等於它的根結點的值;左、右子樹也分別為二叉排序樹;
如圖是乙個bst。
有了這種性質,bst的操作就不難了
# 查詢(find):找值為x的結點編號:從根開始,
if x == now 返回該結點編號
if x < now 走到左孩子(左孩子為空則返回-1)
if x > now 走到右孩子(為空則返回-1)
#插入(insert):插入value,從根開始,
if value == now now的計數++
if value < now 插入到左子樹
if value > now 插入到右子樹
if 當前為空 新建結點並連到上個結點
#刪除(delete):刪除值為value的結點
先尋找到結點. o(h)的時間,從根開始找
如果找到了:
if 無左右子樹 : 刪除該結點
if 只有左(or 右)子樹,把子樹接到父親.
else : 在左子樹里找value最大的結點,把當前結點替換成k,再刪除結點k.
封裝到結構體bst裡了。可以參考一下。
#include using namespace std;
struct bst tree[100010];
int size, root;
bst()
int newnode(int value)
void insert(int &k, int value)
if(value == tree[k].value) tree[k].value ++;
else if(value < tree[k].value) insert(tree[k].l, value);
else insert(tree[k].r, value);
} int find(int k, int value)
int findmax(int k)
int del(int &x, int v)
} }} bst;
int main() else if(opt == 2) else if(opt == 3)
} return 0;}/*
61 3
1 21 5
1 42 2
3 3*/
自製樣例結果和分析
bst容易退化成鏈,因此就有了->sbt,splay,red-black tree,treap.....
後面會學習並發表blog的。。
意思就是普通的bst基本沒啥用,打個基礎。
二叉排序樹 BST
二叉排序樹,又叫二叉查詢樹,它或者是一棵空樹 或者是具有以下性質的二叉樹 1.若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2.若它的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3.它的左右子樹也分別為二叉排序樹。1.1 排序二叉樹之插入操作 已知乙個關鍵字值為key的結...
BST(二叉排序樹)
二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。查詢二叉搜尋樹 遞...
二叉排序樹 BST
二叉排序樹,又稱為二叉查詢樹或者二叉搜尋樹.二叉查詢樹為滿足以下條件的樹 1,若左子樹不為空,則左子樹上所有結點的值均小於根結點的值 2,若右子樹不為空,則右子樹上所有結點的值均大於根結點的值 3,它的左右子樹也分為二叉排序樹 插入操作 將待插入的新結點與當前結點進行比較,如果兩個結點的值相同,則表...