【PAT A1043】Is it a Binary Search Tree
#include<iostream>
using namespace std;
#include<vector>
const int MAXN=1010;
int N;
int num[MAXN];
vector<int> beg,pre,rpre,post,rpost;
struct node{
int data;
node * leftNode;
node * rightNode;
node(int cc):data(cc),leftNode(NULL),rightNode(NULL){
}
};
void insertnode(node * &root,int cc) //注意要加&
{
if(root==NULL)
{
root=new node(cc);
// cout<<cc;
return ;
}
if(cc<root->data)
insertnode(root->leftNode,cc);
else if(cc>=root->data)
insertnode(root->rightNode,cc);
return ;
}
void getpre(node * root)
{
if(root==NULL)
return;
pre.push_back(root->data);
getpre(root->leftNode);
getpre(root->rightNode);
}
void getrpre(node * root)
{
if(root==NULL)
return ;
rpre.push_back(root->data);
getrpre(root->rightNode);
getrpre(root->leftNode);
}
void getpost(node * root)
{
if(root==NULL)
return;
getpost(root->leftNode);
getpost(root->rightNode);
post.push_back(root->data);
}
void getrpost(node * root)
{
if(root==NULL)
return ;
getrpost(root->rightNode);
getrpost(root->leftNode);
rpost.push_back(root->data);
}
int main()
{
scanf("%d",&N);
node * root=NULL; //初始为NULL
for(int i=0;i<N;i++)
{
int xx;
scanf("%d",&xx);
beg.push_back(xx);
insertnode(root,xx);
}
getpre(root);
getrpre(root);
if(pre==beg)
{
printf("YES\n");
getpost(root);
for(int i =0;i<post.size()-1;i++)
printf("%d ",post[i]);
printf("%d",post[post.size()-1]);
}else if(rpre==beg)
{
printf("YES\n");
getrpost(root);
for(int i =0;i<rpost.size()-1;i++)
printf("%d ",rpost[i]);
printf("%d",rpost[rpost.size()-1]);
}else printf("NO");
return 0;
}