當前位置:編程學習大全網 - 編程語言 - 二叉查找樹的編程與實現

二叉查找樹的編程與實現

因為樹的定義本身是遞歸的,所以樹的數據結構是典型的遞歸數據結構;

下面是壹個二叉查找樹(中間順序遍歷)。其他房東應該會寫:

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.旅行();

}

  • 上一篇:2023年520分能考上什麽好大學
  • 下一篇:c語言套接字編程實例
  • copyright 2024編程學習大全網