zoukankan      html  css  js  c++  java
  • HDU 3791 二叉搜索树

    二叉搜索树

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 2   Accepted Submission(s) : 2

    Font: Times New Roman | Verdana | Georgia

    Font Size:  

    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
    

    Source

    浙大计算机研究生复试上机考试-2010年
     
     

    一棵非空的二叉搜索树满足以下特征:
    每个结点都有一个作为搜索依据的关键码,所有结点的关键码互不相同。
    左子树(如果存在)上的所有结点的关键码均小于根结点的关键码。
    右子树(如果存在)上的所有结点的关键码均大于根结点的关键码。
    根结点的左右子树也都是二叉搜索树。

    二叉搜索树又称为“二叉排序树”、“二叉查找树”、“二叉检索树”

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    const int N=2010;
    
    char str[30];
    int num1[N],num2[N];
    
    void Insert(int num[N],int index,int x){
        if(num[index]==-1){
            num[index]=x;
            return ;
        }
        if(num[index]<x)
            Insert(num,index<<1,x);
        else
            Insert(num,index<<1|1,x);
    }
    
    int main(){
    
        //freopen("input.txt","r",stdin);
    
        int n;
        while(~scanf("%d",&n) && n){
            memset(num1,-1,sizeof(num1));
            scanf("%s",str);
            for(int i=0;str[i]!='\0';i++){
                int x=str[i]-'0';
                Insert(num1,1,x);
            }
            int flag;
            while(n--){
                scanf("%s",str);
                flag=1;
                memset(num2,-1,sizeof(num2));
                for(int j=0;str[j]!='\0';j++){
                    int x=str[j]-'0';
                    Insert(num2,1,x);
                }
                for(int j=0;j<N;j++)
                    if(num1[j]!=num2[j]){
                        flag=0;
                        break;
                    }
                if(flag)
                    puts("YES");
                else
                    puts("NO");
            }
        }
        return 0;
    }
  • 相关阅读:
    学习HTML-第一章HTML基础
    javascript中apply 和 call 的区别
    数据库
    贝叶斯公式的直观理解(先验概率/后验概率)
    4-决策树
    消息队列
    RESTful api 设计规范
    MySql索引
    MySQL并发控制
    MySQL三层逻辑架构
  • 原文地址:https://www.cnblogs.com/jackge/p/2955777.html
Copyright © 2011-2022 走看看