AcWing 3540. 二叉搜索树
原题链接
简单
#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
int t, n, m, k, l, r, op, x, y;
int f[N], le[N], ri[N],idx;
unordered_set<int> st;
bool flag;
void build(int r, int x) {
if (f[x] < f[r]) {
if (!le[r]) {
le[r] = x;
return;
}
build(le[r], x);
} else {
if (!ri[r]) {
ri[r] = x;
return;
}
build(ri[r], x);
}
}
void dfs(int x,int k){
if(k==1)cout<<f[x]<<" ";
if(le[x])dfs(le[x],k);
if(k==2)cout<<f[x]<<" ";
if(ri[x])dfs(ri[x],k);
if(k==3)cout<<f[x]<<" ";
}
void solve() {
cin >> n;
cin >> f[++idx];
st.insert(f[idx]);
for (int i = 2; i <= n; i++) {
cin >> f[++idx];
if(st.find(f[idx])!=st.end())continue;
st.insert(f[idx]);
build(1, idx);
}
for(int i = 1;i<=3;i++){
dfs(1,i);
cout<<"\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
solve();
return 0;
}