题目链接:1043 Is It a Binary Search Tree
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct node
{
int data;
node *lchild;
node *rchild;
};
void insert(node* &root,int data)
{
if(root==NULL)
{
root=new node;
root->data=data;
root->lchild=root->rchild=NULL;
return;
}
if(data<root->data)
insert(root->lchild,data);
else
insert(root->rchild,data);
}
void preOrder(node* root,vector<int> &vi)
{
if(root==NULL)
return;
else
{
vi.push_back(root->data);
preOrder(root->lchild,vi);
preOrder(root->rchild,vi);
}
}
void preMirror(node* root,vector<int> &vi)
{
if(root==NULL)
return;
vi.push_back(root->data);
preMirror(root->rchild,vi);
preMirror(root->lchild,vi);
}
void postOrder(node* root,vector<int> &vi)
{
if(root==NULL)
return;
else
{
postOrder(root->lchild,vi);
postOrder(root->rchild,vi);
vi.push_back(root->data);
}
}
void postMirror(node* root,vector<int> &vi)
{
if(root==NULL)
return ;
else
{
postMirror(root->rchild,vi);
postMirror(root->lchild,vi);
vi.push_back(root->data);
}
}
vector<int> origin,pre,preM,post,postM;
int main()
{
int n,data;
node* root=NULL;
cin>>n;
int i;
for(i=0;i<n;i++)
{
cin>>data;
origin.push_back(data);
insert(root,data);
}
preOrder(root,pre);
preMirror(root,preM);
postOrder(root,post);
postMirror(root,postM);
if(origin==pre)
{
cout<<"YES"<<endl;
for(i=0;i<post.size();i++)
{
cout<<post[i];
if(i<post.size()-1)
cout<<" ";
}
}else if(origin==preM)
{
cout<<"YES"<<endl;
for(i=0;i<postM.size();i++)
{
cout<<postM[i];
if(i<postM.size()-1)
cout<<" ";
}
}else
{
cout<<"NO"<<endl;
}
return 0;
}