我們在進行搜尋時,最簡單的無疑是for迴圈,可它的效率太低了,今天我們來了解一下方便快捷的二叉搜尋樹。
什麼是二叉搜尋樹
二叉搜尋樹的插入演算法
二叉搜尋樹的建立
二叉搜尋樹的搜尋
叫二叉搜尋樹,那麼它一定要是一顆二叉樹了,它滿足以下特點:
1,每個節點都有乙個作為搜尋依據的關鍵碼,節點的關鍵碼不同,且為搜尋資料。
2,左子樹上所有節點的關鍵碼都小於根節點的關鍵碼。
3,右子樹所有節點的關鍵碼都大於根節點的關鍵碼。
4,左右子樹也都是二叉搜尋樹。
因為二叉樹搜尋樹的特性,所以當我們用中序遍歷二叉搜尋樹時,就會的到乙個從小到大排列的序列,可以用它來檢測二叉搜尋樹的建立是否正確。
在考慮建乙個二叉搜尋樹之前,我們先來考慮一下它的插入演算法。
node* bst::
insert
(int a,node*
&roottemp)
else
if(a < roottemp-
>data)
insert
(a, roottemp-
>lchild)
;else
if(a > roottemp-
>data)
insert
(a, roottemp-
>rchild)
;return roottemp;
}
在這裡我們學乙個非常奇妙的指標引用,單用指標的話,指標每一次都會更新,因為他僅僅是乙個形參,沒有對本身就行改變,就導致我們無法建立節點之間的乙個聯絡。在運用指標引用後,他作為乙個實參,每乙個為空的節點,在我們建立乙個節點時,它都是上乙個不為空的節點的左右子女,很自然的我們就把乙個搜尋二叉搜的聯絡建立了起來。
有了插入演算法,建立二叉樹就非常的簡單了,我們只需對於每乙個值,呼叫插入演算法,就很自然的建立出了乙個搜尋二叉樹。
void bst::
setbst
(int
* arr, node* p)
}
二叉搜尋樹的搜尋就更沒有問題了,**很簡單,一看就會(上手也不會廢)。
int bst::
search
(int a, node*
& roottemp)
}
結合我的節點定義
int arr[9]
=;struct node;}
;
謝謝大噶夥! 二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹簡單介紹
2.最大關鍵字元素和最小關鍵字元素 2.插入和刪除 2.刪除 1.概述 一棵二叉搜尋樹是以一棵二叉樹組織的,其中每個結點就是乙個物件,每個節點包含屬性left right p,它們分別指向結點的左孩子,右孩子和雙親,如果某個結點的孩子的屬性值不在,則為nil。對任何結點x,x左子樹中的關鍵字最大不超...
二叉搜尋樹的實現
binarysearchtree.h inte ce for the binarysearchtree class.include binarytreenode.h include binarytree1.h if defined afx binarysearchtree h 1cd2ff9d 73...