• HDU 3791 判断是否是同一二叉树


    二叉搜索树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 8507    Accepted Submission(s): 3814


    Problem Description
    判断两序列是否为同一二叉搜索树序列
     
    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
     
    题意:开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
    接下去一行是一个母序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
    接下去的n行有n个子序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成一颗相同的二叉搜索树。
     
    #include<iostream>
    #include<string.h>
    #include<string>
    #include<algorithm>
    #include<math.h>
    #include<string>
    #include<string.h>
    #include<vector>
    #include<utility>
    #include<map>
    #include<queue>
    #include<set>
    #define mx 0x3f3f3f3f
    #define ll long long
    #define MAXN 100
    using namespace std;
    int tree[10005],a[10005];
    int tree1[10005];
    
    void insert()//二叉树建树
    {
        memset(tree,-1,sizeof(tree));
        for(int i=0;a[i];i++)
        {
            int num=a[i]-'0';
            int j=1;
            while(tree[j]!=-1)
            {
                if(num>tree[j])
                    j=j*2;
                else
                    j=j*2+1;
            }
            tree[j]=num;
        }
    
    }
    int main()
    {
        int n;
        while(cin>>n){
        if(n==0)
            break;
        string s;
        cin>>s;
        memset(tree,-1,sizeof(tree));
        for(int i=0;s[i];i++)
        {
            int num=s[i]-'0';
            int j=1;
            while(tree[j]!=-1)
            {
                if(num<tree[j])
                    j=j*2;
                else
                    j=j*2+1;
            }
            tree[j]=num;
        }
        
        while(n--)
        {
            string ss;
            cin>>ss;
            memset(tree1,-1,sizeof(tree1));
            for(int i=0;ss[i];i++)
            {
                int num=ss[i]-'0';
                int j=1;
                while(tree1[j]!=-1)
                {
                    if(num<tree1[j])
                        j=j*2;
                    else
                        j=j*2+1;
                }
                tree1[j]=num;
            }
            int i;
            for(i=1;i<=1024&&tree[i]==tree1[i];i++);
            if(i>1024)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
            
        }
    }
        return 0;
    
    }
  • 相关阅读:
    Oracle学习 第29天 存储过程生成报表
    Oracle学习 第28天 存储过程输出结果集
    Python学习 第9天 连接FTP和数据库
    Bat脚本学习-6:Oracle自动备份还原脚本
    Bat脚本学习-5:Oracle自动备份还原脚本
    Bat脚本学习-4:Oracle自动备份还原脚本
    Vue学习 第2天 又看了个教程,加深理解
    Vue学习 第1天 初始Vue及MVVM
    下半年加油,好久没上来冒个泡了
    Python学习 第8天 打包exe
  • 原文地址:https://www.cnblogs.com/-citywall123/p/11436554.html
Copyright © 2020-2023  润新知