zoukankan      html  css  js  c++  java
  • 二叉搜索树(HDU3791)

    判断两序列是否为同一二叉搜索树序列
    Input
    开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
    接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
    接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
    Output
    如果序列相同则输出YES,否则输出NO
    Sample Input
    2
    567432
    543267
    576342
    0
    Sample Output
    YES
    NO
    //这是比较简单的二叉搜索树题目,第一次看到时不知道题目什么意思,唉!囧!就是按序列顺序构建二叉搜索树,看下构建的是否一样就可以了

    #include <stdio.h>
    #include <string.h>
    int
     a[1024],b[1024];
    void
     cta(char c,int i)//这个和下面可以合并一个,用指针传递数组
    {

        if
    (a[i]==0)
          {
    a[i]=c;return;}
        if
    (a[i]>c)
         cta(c,i<<1);
         else

         cta(c,i<<1|1);
    }

    void
     ctb(char c,int i)
    {

        if
    (b[i]==0)
          {
    b[i]=c;return;}
        if
    (b[i]>c)
         ctb(c,i<<1);
         else

         ctb(c,i<<1|1);
    }

    int
     cmp(int j)//这里是让构建好的2棵树比较!
    {

        int
     m1,m2;
        if
    (a[j]!=b[j])
         return
     0;
        if
    (a[j]==0)
         return
     1;
         m1=cmp(j<<1);
         m2=cmp(j<<1|1);
        return
     m1>m2?m2:m1;//递归回程,判断树是否一样
    }

    int
     main()
    {
     int i,n;
      char
     c[13],s[13];
      while
    (scanf("%d",&n),n)
      {
       memset(a,0,sizeof(a));
          scanf("%s",c);//输入原序列
          for
    (i=0;c[i]!='\0';i++)
             cta(c[i],1);
          while
    (n--)
          {
     memset(b,0,sizeof(b));//开始这里和a放一起了,就错了!
             scanf("%s",s);
            for
    (i=0;s[i]!='\0';i++)
               ctb(s[i],1);
            if
    (cmp(1))
            printf("YES\n");
            else

            printf("NO\n");
          }
      }

      return
     0;
    }

    这样做速度还是快的,0Ms,做的第一道二叉树题目!

                                                               -----江财小子

  • 相关阅读:
    FZU Problem 2169 shadow
    tomcat配置虚拟主机
    数据库设计中的14个技巧
    JSP动作--JSP有三种凝视方式
    BoundsChecker使用
    个人收藏的flex特效网址【经典中的极品】
    C++中的explicitkeyword
    Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数
    深入浅出JMS(一)——JMS简单介绍
    一个有意思的编程练习站点
  • 原文地址:https://www.cnblogs.com/372465774y/p/2421684.html
Copyright © 2011-2022 走看看