樹 二叉搜尋樹 bst

2021-10-04 22:38:59 字數 1863 閱讀 1781

二叉搜尋樹

定義​ 二叉搜尋樹(bst)也稱二叉排序樹或二叉查詢樹

二叉搜尋樹:一棵二叉樹,可以為空;如果不為空,滿足以下性質:

非空左子樹的所有鍵值小於其根結點的鍵值

非空右子樹的所有鍵值大於其根結點的鍵值

左、右子樹都是二叉搜尋樹

特殊函式

bintree find(elementtype x,bintree bst):從二叉搜尋樹 bst 中查詢元素 x,返回其所在結點位址

bintree findmin(bintree bst):從二叉搜尋樹 bst 中查詢並返回最小元素所在結點的位址

bintree findmax(bintree bst):從二叉搜尋樹 bst 中查詢並返回最大元素所在結點的位址

bintree insert(elementtype x,bintree bst):插入乙個元素進 bst

bintree delete(elementtype x,bintree bst):從 bst 中刪除乙個元素

查詢最大和最小元素

最大元素一定是在樹的最右分支的端結點上

最小元素一定是在樹的最左分支的端結點上

刪除刪除的三種情況:

要刪除的是葉結點:直接刪除,並將其父結點指標置為 null

要刪除的結點只有乙個孩子結點:將其父結點的指標指向要刪除結點的孩子結點

要刪除的結點有左、右兩棵子樹:用右子樹的最小元素或左子樹的最大元素替代被刪除結點

**:

#include

using

namespace std;

struct node

;node*

find

(node *

&root,

int data)

else

if(root-

>data

else

return root;

}node *

findmin

(node *root)

}return root;

}node *

insert

(node *

&root,

int data)

else

if(root-

>data>data)

else root-

>right=

insert

(root-

>right,data)

;return root;

}node *

delete

(node * root,

int data)

if(root-

>data

else

if(root-

>data>data)

else

else

if(root-

>left&&

!root-

>right)

else

if(root-

>right&&

!root-

>left)

else root=

null;}

return root;

}void

inorder

(node *root)

}int

main()

/*5該樹的中序遍歷結果是:

1 2 3 4 5 6 7 8 9 刪除節點5後的中序遍歷結果:

1 2 3 4 6 7 8 9

*/

二叉搜尋樹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 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...