定義
二叉檢索樹或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉檢索樹。又稱二叉搜尋樹,二叉排序樹。
結點的實現
template
<
typename key,
typename e>
struct bstnode
void
setleft
(node* t)
void
setright
(node* t)
};
基本操作
//e為數值的資料型別,key為鍵值的資料型別
e*find
(const key& k)
e*findhelp
(node* t,
const key& k)
要插入乙個值,首先要明確它應該被插到什麼地方。遞迴查詢它應該被插入的地方,最終達到乙個葉結點或在待插入方向上沒有子節點的分支結點。最後將該值插進去。
void
insert
(const key& k,
const e& v)
node*
inserthelp
(node* t,
const key& k,
const e& v)
node*
deletemin
(node* t)
}
還可以根據這個性質來找到最小鍵值結點
node*
getmin
(node* t)
接下來就考慮如何刪除任一結點了。首先找到這一節點,
如果它沒有子節點,就將它的父節點指向它的指標設為空指標。
如果它有乙個子節點,那麼將它的父節點指向它的指標改為指向它的子節點的指標。
如果它有兩個子節點,較好的做法是從它的子樹中找到乙個可以替代它的值。為了保持二叉檢索樹的性質,我們應該選擇大於等於被替換值的最小值或小於等於它的最大值。即左子樹中值最大的結點或右子樹中值最小的結點。由於我們在建立二叉檢索樹時,大於等於結點的值都在結點的右子樹,故我們最好選擇右子樹的最小值。否則樹的性質就會發生改變。
void
remove
(const key& k)
node*
removehelp
(node* t,
const key& k)
//右子樹為空的情況
else
if(t-
>right ==
nullptr
)else
}//放hi新的根節點
return t;
}
#include
#include
#include
#define safe_delete(p) if(p)
using
namespace std;
template
<
typename key,
typename e>
struct bstnode
void
setleft
(node* t)
void
setright
(node* t)};
template
<
typename key,
typename e>
class
bst node*
deletemin
(node* t)
} node*
getmin
(node* t)
node*
removehelp
(node* t,
const key& k)
else
if(t-
>right ==
nullptr
)else
}return t;
} e*
findhelp
(node* t,
const key& k)
void
clearhelp
(node* t)
void
printhelp
(node* t,
int dep)
public
:bst()
~bst()
void
clear()
void
insert
(const key& k,
const e& v)
void
remove
(const key& k)
e*find
(const key& k)
intsize()
const
void
print()
};intmain
(int argc,
char
** ar**)
t.print()
;scanf
("%d"
,&a)
;int
*x = t.
find
(a);
if(x !=
nullptr
) cout <<
*x << endl;
safe_delete
(x);
t.clear()
;return0;
}
資料結構C 實現 二叉樹
adt btree btnode const t x btnode const t x,btnode l,btnode r 三個資料成員 t element btnode lchild,rchild 二叉樹類包含唯一的資料成員,它是指向乙個二叉鍊錶根結點的指標root 二叉樹類 先建立二叉樹結點類 ...
資料結構的C實現 二叉樹
二叉樹及其遞迴和非遞迴遍歷 include include define maxkey 100 define ok 1 typedef char elemtype typedef struct node node 二叉樹節點 遞迴先序遍歷 void preorder r node tree 遞迴中序...
資料結構 二叉樹的實現(C )
mi tree測試資料 mi tree實現 include stdafx.h include using namespace std 二叉樹 遞迴實現的二叉樹。萬能的遞迴。class mi tree element pleft element pright char data public mi t...