• PAT 天梯赛 是否同一棵二叉搜索树   (25分)(二叉搜索树 指针)


    给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。

    输入格式:

    输入包含若干组测试数据。每组数据的第1行给出两个正整数NNN (≤10le 1010)和LLL,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出NNN个以空格分隔的正整数,作为初始插入序列。最后LLL行,每行给出NNN个插入的元素,属于LLL个需要检查的序列。

    简单起见,我们保证每个插入序列都是1到NNN的一个排列。当读到NNN为0时,标志输入结束,这组数据不要处理。

    输出格式:

    对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。

    输入样例:

    4 2
    3 1 4 2
    3 4 1 2
    3 2 4 1
    2 1
    2 1
    1 2
    0
    

    输出样例:

    Yes
    No
    No
    


      1 #include<cstdio>
      2 #include<iostream>
      3 #include<cstring>
      4 #include<string>
      5 #include<cstdlib>
      6 #include<cmath>
      7 #include<algorithm>
      8 #include<stack>
      9 #include<queue>
     10 using namespace std;
     11 
     12 //变量定义
     13 int n,l,i,tmp; 
     14 
     15 //树结构定义 
     16 typedef struct node
     17 {
     18     int data;
     19     struct node* left;
     20     struct node* right;
     21     node(int _data= -1)
     22     {
     23         data = _data;
     24         left = NULL;
     25         right = NULL;
     26     }
     27 }Bnode;
     28 
     29 //构造二叉搜索树
     30 Bnode* CreateTree(Bnode* root,int data) 
     31 {
     32     if(root == NULL)
     33     root = new node(data);
     34     else
     35     {
     36         if(data > root->data)
     37         {
     38             root->right=CreateTree(root->right,data);
     39         }
     40         if(data < root->data)
     41         {
     42             root->left=CreateTree(root->left,data);
     43         }
     44     }
     45     return root;
     46 }
     47 
     48 //判断两颗二叉搜索树是否相同
     49 bool issame(Bnode* root,Bnode* root2)
     50 {
     51     if(root== NULL&&root2 == NULL)
     52     return true;
     53     else if(root!=NULL&&root2==NULL)
     54     return false;
     55     else if(root==NULL&&root2!=NULL)
     56     return false;
     57     else if(root->data!=root2->data)
     58     return false;
     59     else
     60     {
     61         bool flag1;
     62         flag1=issame(root->left,root2->left);
     63         if(flag1)
     64         {
     65             bool flag2;
     66             flag2=issame(root->right,root2->right);
     67             if(flag2)
     68             return true;
     69         }
     70         return false;
     71     }
     72 } 
     73 
     74 
     75 int main()
     76 {
     77     while(~scanf("%d",&n)&&n!=0)
     78     {
     79         scanf("%d",&l);
     80         Bnode* root = NULL;
     81         Bnode* root2 = NULL;
     82         for(i=0;i<n;i++)//构造初始树
     83         {
     84             scanf("%d",&tmp);
     85             root=CreateTree(root,tmp);
     86         } 
     87         while(l--)
     88         {
     89             Bnode* root2 = NULL;
     90             for(i=0;i<n;i++)
     91             {
     92                 scanf("%d",&tmp);
     93                 root2=CreateTree(root2,tmp);
     94             } 
     95             if(issame(root,root2))
     96             printf("Yes
    ");
     97             else
     98             printf("No
    ");
     99         }
    100     }
    101     
    102     return 0;
    103 } 
  • 相关阅读:
    Using Flex swf to load html into frames(转)
    wan886网址导航 Bo9bo高清电影 两个图标 怎么都删不掉
    Flex的新插件BluePrint
    开源——需要分享共享的无私精神
    Flex相关的开发例子与资源收集(转)
    在FLEX中真正的隐藏一个组件,隐藏后不占据自身的位置. (转)
    显示属性里没有桌面选项卡解决办法
    FLEX如何读取XML文件.(转)
    ACTIONSCRIPT技巧,工具,API大收集(国外资源,转载)
    The Top 10 Things You Should Know About Flex (转)
  • 原文地址:https://www.cnblogs.com/Annetree/p/6611693.html
Copyright © 2020-2023  润新知