• 题目1009:二叉搜索树


    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:4483

    解决:2008

    题目描述:
    判断两序列是否为同一二叉搜索树序列
    输入:
    开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
    接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
    接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
    输出:

    如果序列相同则输出YES,否则输出NO

    样例输入:
    2
    567432
    543267
    576342
    0
    样例输出:
    YES
    NO
    来源:
    2010年浙江大学计算机及软件工程研究生机试真题
    方法1:
      利用静态数组模拟二叉树
    cpp代码:
    #include<iostream>
    using namespace std;
    
    int a[1024];
    int b[1024];
    void createtree(string s,int c[])
    {
        int len=s.length();
        for(int i=0;i<len;i++)
        {
            int temp=s[i]-'0';
            for(int j=1;j<=1023;)
            {
                if(c[j]==-1)
                {c[j]=temp;break;}
                else if(c[j]>temp)
                j=j*2;
                else
                j=j*2+1;    
            }
        }        
    }
    
    int main()
    {
        int n,i;
        string s;
        string t;
        while(cin>>n&&n)
        {
            for(i=0;i<1024;i++) a[i]=-1;
            cin>>s;
            createtree(s,a);
            while(n--)
            {
                for(i=0;i<1024;i++) b[i]=-1;
                cin>>t;
                createtree(t,b);
                for(i=0;i<1024;i++) 
                if(a[i]!=b[i]) break;
                if(i==1024)
                cout<<"YES"<<endl;
                else
                cout<<"NO"<<endl;           
            }    
        }
        return 0;
    }

    方法2:

    判断左右孩子是否相等

     1 #include <stdio.h> 
     2 #include <string.h>
     3 #include <stdlib.h>
     4 typedef struct BTNode
     5 {
     6     int data;
     7     struct BTNode *lchild;
     8     struct BTNode *rchlid;
     9     
    10 }BTNode;
    11 void myinsert(BTNode *&p,int tmp)
    12 {
    13     if(p==NULL)
    14     {
    15         p=new BTNode;
    16         p->lchild=NULL;
    17         p->rchlid=NULL;
    18         p->data=tmp;
    19     }
    20     else if(p->data>tmp)
    21         myinsert(p->lchild,tmp);
    22     else if(p->data<tmp)
    23         myinsert(p->rchlid,tmp);
    24 }
    25 void BTcreate(BTNode *&p,char *c,int l)
    26 {
    27     p=NULL;
    28     int i;
    29     int tmp;
    30     for(i=0;i<l;i++)
    31     {
    32         tmp=c[i]-'0';
    33         myinsert(p,tmp);
    34     }
    35     
    36 }
    37 int flag=1;
    38 int BTsearch(BTNode *p1,BTNode *p2)
    39 {
    40     
    41     if(p1==NULL&&p2==NULL)
    42         return 1;
    43     else if(p1!=NULL&&p2==NULL)
    44         return 0;
    45     else if(p2!=NULL&&p1==NULL)
    46         return 0;
    47     if(p1->data==p2->data)
    48     {
    49         flag=BTsearch(p1->lchild,p2->lchild);
    50         if(flag==0)
    51             return 0;
    52         flag=BTsearch(p1->rchlid,p2->rchlid);
    53         if(flag==0)
    54             return 0;
    55     }
    56     else    
    57         return 0;
    58     return 1;
    59         
    60 }
    61 void myfree(BTNode *p)
    62 {
    63     if(p!=NULL)
    64     {
    65         myfree(p->lchild);
    66         myfree(p->rchlid);
    67         free(p);
    68     }
    69 }
    70 int main(void)
    71 {
    72     int n;
    73     int len;
    74     while(scanf("%d",&n)!=EOF&&n!=0)
    75     {
    76         char str[10];
    77         BTNode *num;
    78         getchar();
    79         gets(str);
    80         len=strlen(str);
    81         BTcreate(num,str,len);
    82         int i;
    83         for(i=0;i<n;i++)
    84         {
    85             char str2[10];
    86             gets(str2);
    87             BTNode *num2;
    88             BTcreate(num2,str2,len);
    89             int result;
    90             result=BTsearch(num,num2);
    91             if(result==1)
    92                 puts("YES");
    93             else
    94                 puts("NO");
    95             myfree(num2);
    96         }
    97         myfree(num);
    98     }
    99 }

    在天勤AC,在九度RE。好奇怪啊。

      

  • 相关阅读:
    Linux中chown和chmod的区别和用法(转)
    一个小时学会Git
    核心团队的信任和默契——超越管理
    一个项目怎么开发出来
    产品经理职责
    从技术到管理:思维转变是关键
    可扩展Web架构与分布式系统
    浅谈大型web系统架构
    亿级Web系统搭建——单机到分布式集群
    Docker容器进入的4种方式
  • 原文地址:https://www.cnblogs.com/sairre/p/3955180.html
Copyright © 2020-2023  润新知