(pat)A 14043.Is It a Binary Search Tree


A Binary Search Tree(BST)is recursively defined as a binary tree which has the following properties:
1.The left subtree of a node contains only node s with key s less than the node’s key.2.The rightsubtreeof a node contains onlynodes with keys graaaaaaaaaaaaaaaatothe the node’s key.Both the the skey.Both the ath the stststststrererererererererererererererereaffffftttttttttttttfffffffffffffrerererererererererererererererererererererererererererererethen the rerrulting tree is caled the Mirror Image of a BST.
Now given a sequence of integer keys,you are supposed to tell if it is the preorder trversal sequence of a BST or the mirror image of a BST.
Input Specification:
Each input file contains one test case.For each case,the first line contains a positive integer N(<=1000).The n N integer keys are given in the next line.All the numbers in a line e e e separated bya space.space.
Output Specification:
For each test case,first print in a line「YES」if the sequence is the preorder trversal sequence of a BST or the mirror image of a BST,or「NO」if not.The n if the answer is「YES」,print ine the next the the the next the fortrtratrader line of line e e e e e e e e e e e e e e e e e e e e e e e e.parever.ortratratratratratratratratratratratratratratratratratrable.and there must beのextra space at the end of the line.
Sample Input 1:7 8 6 7 7 7 7 10 11 Sample Output 1:YES 5 8 11 8 Sample Input 2:7 8 8 10 11 11 8 8 7 7 Sample Output 2:YES 11 7 6 8 Sample Input 3:7 8 8 8 11 11 Sample Output 3:NOこの問題は何回か分かりません.前の二つの点の大きさの関係でBSTかミラーのどちらかが分かります.
#include
#include
using namespace std;
struct node
{
    int val;
    node *l;
    node *r;
};
void insert1(node* &root,int x)
{
    if(root==NULL)
    {
        root=new node;
        root->val=x;
        root->l=root->r=NULL;
        return;
    }
    if(xval)
        insert1(root->l,x);
    else
        insert1(root->r,x);
}
void insert2(node* &root,int x)
{
    if(root==NULL)
    {
        root=new node;
        root->val=x;
        root->l=root->r=NULL;
        return;
    }
    if(x>=root->val)
        insert2(root->l,x);
    else
        insert2(root->r,x);
}
int a[1005];
int b[1005];
int num=0;
void pre(node* root)
{
    if(root==NULL)
        return;
    b[num++]=root->val;
    pre(root->l);
    pre(root->r);
}
void post(node* root)
{
    if(root==NULL)
        return;
    post(root->l);
    post(root->r);
    b[num++]=root->val; 
}
int main()
{
    int n;
    node* root=NULL;
    scanf("%d",&n);
    for(int i=0;iscanf("%d",a+i);
    if(n==1)
    {
        printf("YES
%d"
,a[0]); return 0; } if(a[0]>a[1]) for(int i=0;ielse for(int i=0;i//printf("haha"); pre(root); bool flag=true; for(int i=0;iif(a[i]!=b[i]) { flag=false; break; } if(flag) { printf("YES
"
); num=0; post(root); for(int i=0;i1;i++) printf("%d ",b[i]); printf("%d",b[n-1]); } else printf("NO"); return 0; }