码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 3791 二叉搜索树

时间:2014-07-22 22:48:54      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   os   strong   

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,接着是一串数字,顺序扫描后建立一棵二叉搜索树。然后再陆续给n串数字,判断它们遍历的二叉树和第一个二叉树是否相同。

    题目给出的字符串长度不大于10.每个数字在0~9之间。且给出的数字不会有重复。

分析

    数据结构的题目,可以直接自定义个二叉树结点的结构来做。但比较复杂,题目已给出数字长度不会大于10.所以直接用静态的链表(即数组)来解就可以了。要是数字的个数太多就不能这样做。                    

  • 假设用于存储的数组为tree。那么根节点保存在tree[0],而左儿子保存在tree[1],右儿子保存在tree[2]。
  • 可知父节点与子节点之间的换算关系是这样的:若父节点为 i ,那么左儿子为(i+1)*2-1,右儿子为(i+1)*2
  • 所以我们要做的就是分别用两个int数组来保存前后两个字符串建立的二叉树。然后去比较这两个数组是否相等就可以了。
  • 那么我们的node数组需要多大呢?10?9?错。这里要考虑所有可能的结点插入情况。其中最极端一种就是有9个结点,但是全部是右子树,这是最浪费空间的情况。此时树的深度是9。考虑深度为9的满二叉树的结点个数:2^9-1。只要大于这个数字就好。
 
 
#include<stdio.h>
#include<string.h>
#define max 512;
int main()
{
    int i,j,n,c;
        int tree[512],tree1[512];
    char s[22];
    while(scanf("%d",&n)!=EOF&&n!=0)
    {
        scanf("%s",s);
        memset(tree,-1,sizeof(tree));
        for(i=0;s[i]!=\0;i++)
        {
            j=0;
            c=s[i]-0;
            while(tree[j]!=-1)
            {
                if(c>tree[j])
                    j=(j+1)*2;
                if(c<tree[j])
                    j=(j+1)*2-1;
            }
            tree[j]=c;
        }
        while(n--)
        {
            scanf("%s",s);
            memset(tree1,-1,sizeof(tree1));
            for(i=0;s[i]!=\0;i++)
        {
            j=0;
            c=s[i]-0;
            while(tree1[j]!=-1)
            {
                if(c>tree1[j])
                    j=(j+1)*2;
                if(c<tree1[j])
                    j=(j+1)*2-1;
            }
            tree1[j]=c;
        }
            for(i=0;i<512;i++)
            
                if(tree[i]!=tree1[i])
                {
                    printf("NO\n");
                    break;
                }
                if(i>=512)
                    printf("YES\n");

                
            
            
        }
    }
}

 

 

hdu 3791 二叉搜索树,布布扣,bubuko.com

hdu 3791 二叉搜索树

标签:des   style   blog   color   os   strong   

原文地址:http://www.cnblogs.com/xhp956614463/p/3855916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!