蒟蒻BST炸了,帮忙看看!
  • 板块学术版
  • 楼主VegeBeany
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/1/11 10:12
  • 上次更新2023/10/24 04:47:33
查看原帖
蒟蒻BST炸了,帮忙看看!
630240
VegeBeany楼主2023/1/11 10:12

题面,没打LaTeX N个操作,分别对应插入(I)一个数和删除(D)一个数,如果插入的数已存在,输出has been,否则将这个数插入,并输出insert success,对于删除一个数,如果该数不存在,输出not exist,如果存在,删除它,并输出delete success

BST:

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct BST{
	int val=0,l=0,r=0;
}a[100001];
int tot,root=1;
int find_(int p,int x){
	if(p==0)return -1;
	if(x==a[p].val)return p;
	if(x<a[p].val)return find_(a[p].l,x);
	else return find_(a[p].r,x);
}
int find(int x){return find_(root,x);}
void insert_(int &p,int x){
	if(p==0){
		a[++tot].val=x;
		p=tot;
		return;
	}
	if(x<a[p].val)insert_(a[p].l,x);
	else insert_(a[p].r,x);
}
void insert(int x){insert_(root,x);}
void dele_(int &p,int x){
	if(p==0)return;
	if(x==a[p].val){
		if(a[p].l==0)p=a[p].r;
		else if(a[p].r==0)p=a[p].l;
		else{
			int nxt=a[p].r;
			while(nxt)nxt=a[nxt].l;
			dele_(a[p].r,a[nxt].val);
			a[nxt].l=a[p].l,a[nxt].r=a[p].r;
			p=nxt;
		}
		return;
	}
	if(x<a[p].val)dele_(a[p].l,x);
	else dele_(a[p].r,x);
	return ;
}
void dele(int x){dele_(root,x);}
signed main(){
	a[1].val=1e16,a[2].val=-1e16,a[1].l=2;tot=2;
	int n;
	scanf("%lld",&n);
	while(n--){
		char x;
		int p;
		cin>>x>>p;
		if(x=='I'){
			if(find(p)!=-1){
				puts("has been");
			}else{
				puts("insert success");
				insert(p);
			}
		}else{
			if(find(p)==-1){
				puts("not exist");
			}else{
				puts("delete success");
				dele(p);
			}
		}
	}
	return 0;
}

2023/1/11 10:12
加载中...