zoukankan      html  css  js  c++  java
  • 题目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。好奇怪啊。

      

  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/sairre/p/3955180.html
Copyright © 2011-2022 走看看