動態查詢之二叉樹查詢 c 實現

2022-02-11 13:18:16 字數 2903 閱讀 8172

演算法思想

二叉搜尋樹(又稱二叉查詢樹或二叉排序樹)bst樹

二叉查詢樹

二叉查詢樹,也稱二叉搜尋樹,或二叉排序樹。其定義也比較簡單,要麼是一顆空樹,要麼就是具有如下性質的二叉樹:

(1)若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

(2) 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

(3) 任意節點的左、右子樹也分別為二叉查詢樹;

(4) 沒有鍵值相等的節點。

二叉查詢樹的性質總結:

a.二叉查詢樹還有乙個性質,即對二叉查詢樹進行中序遍歷,即可得到有序的數列。

​b.二叉查詢樹的查詢複雜度,和二分查詢一樣,插入和查詢的時間複雜度均為 o(logn) ,但是在最壞的情況下仍然會有 o(n) 的時間複雜度。原因在於插入和刪除元素的時候,樹沒有保持平衡。

具體實現:

1

/****

2* binarysorttree.3*

4***

*/5 #include"

stdafx.h

"6 #include 7 #include8

using

namespace

std;

9 typedef struct

node

10bitnode,*bintree;

15//

insert binary tree function

16 bintree insert_binarytree(bintree &bt,int

key)

1726

if (key < bt->elem)

2730

else

3134

return

bt;35}36

//for one search binary tree function

37int search_binarytree(bintree &bt,int

key)

3846

else

4750}51

//for another one search binary tree function

52int search_binarytree(bintree &bt, int key, bitnode ** p, bitnode**pf)

5365

else

6670}71

return0;

72}73//

delete binary tree function

74int delete_binarytree(bintree *bt,int

key)

7591

if (p == pf->leftchild)

9298

else

99105

}106

//刪除的節點只有乙個子節點

107if (p->leftchild == 0

)108

115if(p==pf->leftchild)

116121

else

122127

}128

129if (p->rightchild == 0

)130

137if (p == pf->rightchild)

138143

}144

//3.刪除的節點含有兩個子節點

查詢之二叉樹查詢

1.查詢樹的建立 createtree 假設有如下陣列4,1,45,78,345,23,12,3,6,21 首先選定4為root,然後遍歷剩下的數字,如果大於等於4則放到4的右側,小於4放到4的左側,最後構建成的樹 所有的左孩子都小於父節點,所有的右孩子都大於等於父節點。如下圖 2.遍歷查詢樹 di...

二叉樹(二)之二叉查詢樹

目錄 一 二叉查詢樹的概念 二 二叉查詢樹的實現 三 二叉查詢樹 binary search tree 又被稱為二叉搜尋樹。它是特殊的二叉樹 對於二叉樹,假設x為二叉樹中的任意乙個結點,x節點包含關鍵字key,節點x的key值記為key x 如果y是x的左子樹中的乙個結點,則key y key x ...

演算法之 二叉樹的查詢

由於自己的一時糊塗,將英語單詞left和right弄反了,給你們的閱讀帶來很多不便,所以還是盡情諒解,由於是個人的 新手,所以有很多肯能你們認為不對的地方,還是請大家多提意見!c語言 codee 11760 include include define max 1 10 struct node ty...