下面是壹個二叉查找樹(中間順序遍歷)。其他房東應該會寫:
typedef int T;
Bst類{
結構節點{
測試數據;
node * L;
node * R;
節點(常數T & ampd):數據(d),L(0),R(0){}
};
typedef Node * TreeRoot
節點*根;
int len
公共:
Bst():root(NULL),len(0){}
~ Bst(){ Clear(root);}
bool Empty()const { return len = = 0;}
int Size()const { return len;}
私人:
void Ins(tree root & amp;r,Node* p){
if(r = = NULL)r = p;
else if(p-& gt;數據& ltr-& gt;數據)Ins(r-& gt;l,p);
else Ins(r-& gt;r,p);
}
布爾擦除(樹根& ampr,const T & ampd){
節點* & ampt = Find(r,d);
if(t==NULL)返回false
if(t->;我!= NULL)Ins(t-& gt;r,t-& gt;l);//將左側子樹根節點插入右側子樹。
node * p = t;
t = t-& gt;r;
刪除p;
返回true
}
節點* & amp查找(樹根& ampr,const T & ampd){
if(r==NULL)返回r;//此時R為空,表示失敗。
if(r-& gt;data==d)返回r;//此時R指向找到的數據,搜索成功。
if(d & lt;r-& gt;data)返回Find(r-& gt;l,d);
返回Find(r-& gt;r,d);
}
無效旅行(樹根& ampr){
if(r==NULL)返回;
旅行(r-& gt;l);
cout & lt& ltr-& gt;數據& lt& lt' ';
旅行(r-& gt;r);
}
空洞清除(樹根& ampr){
if(r==NULL)返回;
清除(r-& gt;l);
清除(r-& gt;r);
刪除r;
r = NULL
}
公共:
布爾替換(const T & ampoldd,const T & ampnewd){
如果(!Erase(root,oldd))返回false
Ins(root,new Node(newd));
返回true
}
無效Ins(const T & amp;d){Ins(根,新節點(d));++ len;}
void Travel(){ Travel(root);cout & lt& ltendl}
布爾擦除(常數T & ampd){return Erase(root,d);-萊恩;}
布爾查找(const T & ampd){return Find(root,d)!= NULL}
void Clear(){ Clear(root);}
};
int main()
{
BST b;
b.ins(20);b . Ins(10);b . Ins(30);b . Ins(15);b . Ins(8);
b.ins(50);b . Ins(25);
cout & lt& lt" size = " & lt& ltb . Size()& lt;& ltendl
b.旅行();
b.替換(25,18);b .替換(10,22);b .替換(20,35);
cout & lt& lt" size = " & lt& ltb . Size()& lt;& ltendl
b.旅行();
}