#include<bits/stdc++.h>
using namespace std;
bool isMirror;
vector<int> pre,post;
void getpost(int root,int tail){
if(root>tail) return;
int i=root+1,j=tail;
if(isMirror){
while(i<=tail&&pre[i]>=pre[root]) i++;
while(j>root&&pre[j]<pre[root]) j--;
}else{
while(i<=tail&&pre[i]<pre[root]) i++;
while(j>root&&pre[j]>=pre[root]) j--;
}
if(i-j!=1) return;
getpost(root+1,j);
getpost(i,tail);
post.push_back(pre[root]);
}
signed main(){
int n;
cin>>n;
pre.resize(n);
for(int i=0;i<n;i++)
cin>>pre[i];
getpost(0,n-1);
if(post.size()!=n){
isMirror=true;
post.clear();
getpost(0,n-1);
}
if(post.size()==n){
cout<<"YES"<<endl;
for(int i=0;i<n;i++){
if(i) cout<<" "<<post[i];
else cout<<post[i];
}
}else cout<<"NO"<<endl;
return 0;
}
L2-004 这是二叉搜索树吗?
最新推荐文章于 2024-08-30 19:42:47 发布