初學者實現了二叉查詢樹的實現:
實現的功能包括:
建構函式
西溝函式
判空函式
遞迴搜素
非遞迴搜尋
刪除元素
前序遍歷
中序遍歷
後續遍歷
層遍歷 ---沒有實現
直接上**吧,請大牛指導
標頭檔案:
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 對於刪除操作 若刪除的節點尾葉子節點 則直接刪除 若刪除的節點存在乙個葉子節點 則將當前節點父節點的引用直接指向當前節點的子節點 葉子節...