二叉搜索树 模板

概念:左节点比根小,右节点比根大。

struct Node{
	int val;
	Node * left;
	Node * right;
};
Node * insert(Node * p,int x){//插入一个节点 
	if(p==NULL){
		Node * q=new Node;
		q->val=x;
		q->left=NULL;
		q->right=NULL;
		return q;
	}
	else{
		if(x<p->val)p->left=insert(p->left,x);
		else p->right=insert(p->right,x);
		return p;
	}
}
bool find(Node * p,int x){
	if(p==NULL)return false;
	if(p->val==x)return true; 
	if(x<p->val)return find(p->left,x);
	else return find(p->right,x);
}
Node * remove(Node * p,int x){
	if(p==NULL)return NULL;
	else if(x<p->val)p->left=remove(p->left,x);
	else if(x>p->val)p->right=remove(p->right,x);
	else if(p->left==NULL){//等于并且左子树为空 
		Node * q=p->right;
		delete p;
		return q;//递归操作,直接给就行了 
	}
	else if(p->right==NULL){//没有右子树 
		Node * q=p->left;
		delete p;
		return q;
	} 
	else{//左右子树都存在,把左子树最大的节点拿出来,即最右节点 
		Node * q;
		for(q=p->left;q->right->right!=NULL;q=q->right);
		Node * r=q->right;
		q->right=r->left; 
		r->left=p->left;
		r->right=p->right;
		delete p;
		return r; 
	}
	return p;
}

STL流的set是一个二叉搜索树结构,具有去重功能,输出时从小到大排序。

int main(){
	set<int> sets;
	set<int>::iterator it;
	for(int i=1;i<=5;i++){
		sets.insert(i);
	}
	for(int i=2;i<=6;i++){
		it=sets.find(i);
		cout << (it==sets.end()?0:1) << endl;
	}
	cout << "!!" << endl;
	for(int i=3;i<=5;i++){
		sets.erase(i);
	}
	for(int i=1;i<=5;i++){
		it=sets.find(i);
		cout << (it==sets.end()?0:1) << endl;
	}
	return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值