BST 求调
  • 板块学术版
  • 楼主tder
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/23 20:27
  • 上次更新2023/12/23 20:56:21
查看原帖
BST 求调
714254
tder楼主2023/12/23 20:27

rt. 为啥一运行就直接 RE?

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 5;
template<class Tp, Tp INF1, Tp INF2 = -INF1>
class Bst {
	private:
		struct Node {
			int l, r;
			Tp v;
		} a[N];
		int t = 0, rt = 1;
		int add(Tp v) {
			cout<<"add("<<v<<")..."<<endl;
			a[++t].v = v;
			return t;
		}
		int finding(Tp v, int p) {
			if(!p) return 0;
			else if(a[p].v == v) return p;
			else if(a[p].v > v) return finding(v, a[p].l);
			else return finding(v, a[p].r);
		}
		int inserting(Tp v, int &p) {
			if(!p) {
				p = add(v);
				return p;	
			} else if(a[p].v == v) return -1;
			else if(a[p].v > v) return inserting(v, a[p].l);
			else return inserting(v, a[p].r);
		} 
	public:
		void init() {
			cout<<"init()..."<<endl;
			add(INF2);
			add(INF1);
			a[1].r = 2;
		}
		int find(Tp v) {
			finding(v, rt);
		}
		int insert(Tp v) {
			inserting(v, rt);
		}
}; 
signed main() {
	cout<<"start"<<endl;
	Bst<int, N, -N> b;
	cout<<"done"<<endl;
	b.init();
	while(1) {
		int op, x;
		cin>>op>>x;
		if(op == 1) cout<<b.find(x)<<endl;
		else cout<<b.insert(x)<<endl;
	} 
	return 0;
}
2023/12/23 20:27
加载中...