二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树。
二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质:
- 非空左子树的所有键值小于其根结点的键值。
- 非空右子树的所有键值大于其根结点的键值。
- 左、右子树都是二叉搜索树。
(或者左右键值性质互换)
#pragma GCC optimize(3,"Ofast","inline")
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
#define int long long
#define ld long double
int n,tr[1000100];
int id;
void solve()
{ cin>>n;
while(n--){
int i=1;
int x;cin>>x;
while(tr[i]) {
if(x>tr[i]) i=i*2;//找左子树
else i=i*2+1;//找右子树
}
id=max(id,i);//最大序
tr[i]=x;
}
int ok=0;
for(int i=1;i<=id;i++){
if(tr[i]){
if(i!=1) cout<<" ";
cout<<tr[i];
}
else ok=1;
}
cout<<endl;
if(ok) cout<<"NO";
else cout<<"YES";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
return 0;
}