二叉排序樹BST

2021-08-15 13:36:16 字數 1545 閱讀 1372

二叉排序樹(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,它的左右子樹也分為二叉排序樹 插入操作 將待插入的新結點與當前結點進行比較,如果兩個結點的值相同,則表...