BST的题我很喜欢
注意插入是右边的小,左边的大。
#include <iostream>
#include <algorithm>
#include <string>
#include <deque>
#include <cstring>
#include <queue>
#include <vector>
#include <cstdio>
using namespace std;
vector<int> out;
int Max = 0;
struct node{
int val, no;
node *left;
node *right;
node(int x, int y){
val = x;
no = y;
left = right = nullptr;
}
};
void insert(node*& root, int val, int no){
if(!root){
Max = max(Max, no);
root = new node(val, no);
}else if(root->val > val){
insert(root->right, val, 2*no+1);
}else insert(root->left, val, 2*no);
}
void layerorder(node* root){
queue<node*> q;
q.push(root);
bool tag = false;
while(q.size()){
auto t = q.front();
q.pop();
if(!tag){
cout<<t->val;
tag = true;
}else{
cout<<" "<<t->val;
}
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
}
int main(){
int n, x;
cin>>n;
node* root = nullptr;
for(int i = 0; i < n; i++){
cin>>x;
insert(root, x, 1);
}
layerorder(root);
cout<<endl;
if(Max == n) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}