#include<cstdio>
#include<vector>
#include<iostream>
using namespace std;
vector<int> A,post,pre,mir,postm;
struct node{
int data;
node* left, *right;
};
void insert(node* &r, int value){
if(r == NULL){
r = new node;
r->data = value;
r->left = r->right = NULL;
}
else if(r->data > value){
insert(r->left, value);
}else insert(r->right, value);
}
void postorder(node* r){
if(r == NULL) return;
postorder(r->left);
postorder(r->right);
post.push_back(r->data);
}
void postorderm(node* r){
if(r == NULL) return;
postorderm(r->right);
postorderm(r->left);
postm.push_back(r->data);
}
void preorder(node* r){
if(r == NULL) return;
pre.push_back(r->data);
preorder(r->left);
preorder(r->right);
}
void mirror(node* root){
if(root == NULL) return;
mir.push_back(root->data);
mirror(root->right);
mirror(root->left);
}
int main(){
int n,tmp;
cin>>n;
node *root=NULL;
for(int i=0;i<n;i++){
cin>>tmp;
A.push_back(tmp);
insert(root, tmp);
}
preorder(root);
mirror(root);
if(pre == A ){
postorder(root);
cout<<"YES"<<endl;
for(int i=0;i<post.size();i++){
cout<<post[i];
if(i != post.size()-1) cout<<" ";
}
}else if(mir == A){
postorderm(root);
cout<<"YES"<<endl;
for(int i=0;i<postm.size();i++){
cout<<postm[i];
if(i != postm.size()-1) cout<<" ";
}
}
else cout<<"NO";
return 0;
}
L2-004 这是二叉搜索树吗? (25 分)
最新推荐文章于 2024-03-07 21:29:16 发布