传送门:点击打开链接
主要是是复习一下二叉搜索树
代码:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int N = 35;
int n,tr[1<<20],a[N];
void build(int id,int num){///数组模拟树 简洁
if(tr[id]==0) tr[id]=num;
else if(num>tr[id]) build(id<<1,num);
else if(num<tr[id]) build(id<<1|1,num);
}
int main(){
while(cin>>n){
memset(tr,0,sizeof(tr));
for(int i=1;i<=n;i++){
cin>>a[i];
build(1,a[i]);
}
int flag=0;
for(int i=1;i<=n;i++)
if(!tr[i]) flag=1;
int ct=1;
for(int i=1;ct<=n;i++)
if(tr[i]) {
ct++,cout<<tr[i];
if(ct!=n+1) cout<<" ";
}
cout<<endl;
if(flag) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}