1 二叉查找树
#include
#include
#include
using namespace std;
class BinarySearchTree{
private:
struct BN{
int data;
BN *left;
BN *right;
BN(int data,BN *left,BN *right){
this->data=data;
this->left=left;
this->right=right;
}
};
BN *root;
public:
BinarySearchTree(){
root=new BN(0,NULL,NULL);
}
void insert_s(int x,BN *&t){
if(t==NULL){
t=new BN(x,NULL,NULL);
}
if(xdata){
insert_s(x,t->left);
}
else if(x>t->data){
insert_s(x,t->right);
}
}
void insert(int x){
//将新的元素插入二叉查找树
insert_s(x,root);
}
void printTree_s(const BN *t){
if(t!=NULL){
printTree_s(t->left);
printTree_s(t->right);
cout<data<data<left);
PreOrder(root->right);
}
}
void InOrder(const BN *root){
if(root!=NULL){
InOrder(root->left);
cout<data<right);
}
}
void PostOrder(const BN *root){
PostOrder(root->left);
PostOrder(root->right);
cout<data;
}
void remove(int x){
//删除某个特定值
remove_s(x,root);
}
void remove_s(int x,BN *&t){
if(t==NULL){
return;
}
if(xdata){
remove_s(x,t->left);
}
else if(x>t->data){
remove_s(x,t->right);
}
else if(t->right!=NULL&&t->left!=NULL){
t->data=findMin(t->right)->data;
remove_s(t->data,t->right);
}
else{
BN *old=t;
t=(t->left!=NULL)?t->left:t->right;
delete old;
}
}
BN *findMin(BN *t){
//找到数组中的最小值
if(t==NULL){
return NULL;
}
if(t->left==NULL){
return t;
}
return findMin(t->left);
}
bool contains(int x){
//查找二叉树中是否有某个特定元素
return contain_s(x,root);
}
bool contain_s(int x,const BN *t){
if(t==NULL){
return false;
}
if(xdata){
return contain_s(x,t->left);
}
else if(x>t->data){
return contain_s(x,t->right);
}
else{
return true;
}
}
};