#include<iostream>
#include<vector>
#include<functional>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n;++i)
cin >> a[i];
vector<int> ans;
int mir = 0;
int flag=0;
function<void(int, int)> solve = [&](int root, int r)
{
if(flag||root>r)
return;
int l = root + 1;
int ll = r;
int rr = l;
if(mir==0){
while(ll>=l&&a[ll]>=a[root])
ll--;
while(rr<=r&&a[rr]<a[root])
rr++;
}else{
while(ll>=l&&a[ll]<a[root])
ll--;
while(rr<=r&&a[rr]>=a[root])
rr++;
}
if(ll!=rr-1){
flag = 1;
return;
}
solve(l, ll);
solve(rr, r);
ans.push_back(a[root]);
};
solve(0, n - 1);
if(flag){
ans.clear();
flag = 0;
mir = 1;
solve(0, n - 1);
}
if(flag)
puts("NO");
else{
puts("YES");
for (int i = 0; i < n;++i)
cout << ans[i] << " \n"[i == n - 1];
}
}
L2-004 这是二叉搜索树吗? (25 分)
最新推荐文章于 2025-05-05 22:27:32 发布