演算法思想
二叉搜尋樹(又稱二叉查詢樹或二叉排序樹)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...