根据题目描述,tree函数根据给出的中序和性质遍历树,然后每层记录在le[]中
#include<iostream>
#include<vector>
using namespace std;
vector<int> in,le[30];
int N;
void tree(int root,int start,int end,int level){
if(start>end) return;
le[level].push_back(in[root]);
int minl=1000000000,minr=1000000000;
int left=-1,right=-1;
int i=root-1;
while(i>=start){
if(in[i]<minl){
minl=in[i];
left=i;
}
i--;
}
tree(left,start,root-1,level+1);
i=root+1;
while(i<=end){
if(in[i]<minr){
minr=in[i];
right=i;
}
i++;
}
tree(right,root+1,end,level+1);
return;
}
int main(){
cin>>N;
in.resize(N);
int root,min=1000000000;
for(int i=0;i<N;i++){
scanf("%d",&in[i]);
if(in[i]<min){
root=i;
min=in[i];
}
}
tree(root,0,N-1,0);
printf("%d",le[0][0]);
for(int i=1;i<N;i++){
if(le[i].size()!=0){
for(auto it:le[i]){
printf(" %d",it);
}
}else{
break;
}
}
return 0;
}