写了个数组实现的搜索二叉树
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e5+10;
int e[N],l[N],r[N],h[N],idx=1;
int n,m;
void add(int x,int p){
e[idx]=x,h[x]=e[p];//h[i]记录的是元素为i的节点的头节点元素值
if(x>e[p])r[p]=idx++;
else l[p]=idx++;
}
int find(int x,int p){
if((!l[p]&&!r[p])||x==e[p])return p;
if(x<e[p]){
if(l[p])return find(x,l[p]);
else return p;
}
else {
if(r[p])return find(x,r[p]);
else return p;
}
}
void order(int root){
if(l[root])order(l[root]);
cout<<e[root]<<" ";
if(r[root])order(r[root]);
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
if(i==0){
e[idx++]=x;//初始化根节点
continue;
}
int p=find(x,1);
add(x,p);
}
// order(1);
for(int i=1;i<=n;i++){
cout<<h[i]<<" ";
}
return 0;
}