二叉查詢樹的實現

2021-06-21 06:03:50 字數 3457 閱讀 7184

初學者實現了二叉查詢樹的實現:

實現的功能包括:

建構函式

西溝函式

判空函式

遞迴搜素

非遞迴搜尋

刪除元素

前序遍歷

中序遍歷

後續遍歷

層遍歷 ---沒有實現

直接上**吧,請大牛指導

標頭檔案:

bst.h

#includeusing namespace std;

#ifndef bst

#define bst

template class bst;

node(t item):data(item),lc(0),rc(0){};

};node *myroot;

//賦值函式

void bst_copy(node**,node*);

void inorderaux(ostream&,node*) const;

void postorderaux(ostream&,node*) const;

void preorderaux(ostream&,node*) const;

bool searchaux(node*,t ) const;

void insertaux(node**,t);

public:

bst();//初始化為一顆空樹

bst(const bst&);

~bst();

bst& operator=(const bst&);

bool empty() const;

bool search1(const t)const;//採用遞迴

bool search2(const t)const;//採用非遞迴

void insert1(t);//採用遞迴

void insert2(t);//採用非遞迴

bool remove(t);//分刪除葉子節點和單個孩子節點 以及兩個孩子的節點

void preorder(ostream &)const;

void inorder(ostream &) const;

void postorder(ostream &)const;

void layerorder(ostream &)const;

void graph();

};#endif // bst

類的成員函式實現檔案:bst.cpp

#include#include"bst.h"

using namespace std;

//實現bst的成員函式

//初始化

templatebst::bst():myroot(0){};

//賦值函式--已經實現

templatebst::bst(const bst& bst_original)

}templatevoid bst::bst_copy(bst::node **target,bst::node* orginal)

}//析構函式 -----沒有實現

templatebst::~ bst()

//賦值操作符 --已經實現

templatebst& bst::operator=(const bst& bst_original)

return *this;

}//判空操作--已經實現

templatebool bst::empty() const

//遞迴搜尋---已經實現

templatebool bst::search1(const t item) const

templatebool bst::searchaux(bst::node* subroot,const t item) const

//非遞迴搜尋-已經實現

templatebool bst::search2(const t item)const

return found;

}//採用遞迴

templatevoid bst::insert1(t item)

//遞迴插入實現函式

templatevoid bst::insertaux(bst::node **subroot, t item)

else if(item>(*subroot)->data)

insertaux(&((*subroot)->rc),item);

else if(item<(*subroot)->data)

insertaux(&((*subroot)->lc),item);

else

cout<<"the data has already in the bst~~~"if(!found)

else

else if (item>ptemp->data)

else

found=!found;

}if(!found)

else if(ptemp->lc==0 && ptemp->rc!=0)

else if(ptemp->rc==0 && ptemp->lc!=0)

else

ptemp->data=pt2->data;

if(pt2->rc!=0)else

delete pt2;}}

}}//先序遍歷---已經實現

templatevoid bst::preorder(ostream &out) const

}//中序序遍歷--已經實現

templatevoid bst::inorder(ostream &out) const

}//後序遍歷---已經實現

templatevoid bst::postorder(ostream &out) const

}templatevoid bst::layerorder(ostream &)const

templatevoid bst::graph()

測試檔案:
#include #include#include"bst.cpp"

using namespace std;

int main()

1.在程式設計中發現如下問題:

1.將乙個空的指標傳遞給函式的時候,將不能實現改變指標所指的值 ,這個表現在insert函式上

2.頭檔名為bst  然後將類的名字命名為bst的時候將出現錯誤,認為沒有提供類的名稱。

3.將輸入寫成檔案流的形式將更好維護

4const函式只能呼叫返回const值的成員函式

5,檔案流最好不能設定成const型別

有兩個成員函式沒有實現:層遍歷()  和圖形化輸出函式  以及析構函式----折個 以後再加吧

二叉查詢樹,實現

public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...

二叉查詢樹的實現

因為在關聯容器裡面主要的內部結構是rb tree,而紅黑樹又是一種平衡二叉樹,平衡二叉樹又是屬於二叉查詢樹,所以按照 侯捷介紹的順序依次來實現,今天先把二叉查詢樹這種最簡單的實現掉 首先,二叉查詢樹 不像heap中完全二叉樹那樣記憶體分配用線性儲存的,二叉查詢樹一般內部儲存是通過鍊錶來實現的,首先來...

二叉查詢樹的實現

首先構架一顆二叉查詢樹 對於該二叉樹 先序遍歷 6,2,1,5,3,4,7,8 中序遍歷 1,2,3,4,5,6,7,8 後序遍歷 1,4,3,5,2,8,7,6 對於刪除操作 若刪除的節點尾葉子節點 則直接刪除 若刪除的節點存在乙個葉子節點 則將當前節點父節點的引用直接指向當前節點的子節點 葉子節...