ACM 数据结构-二叉树 HDU 3791二叉搜索树

原创 2016年05月30日 15:02:17
<div class="panel_title" align="left">Problem Description</div><div class="panel_content">判断两序列是否为同一二叉搜索树序列</div><div class="panel_bottom"> </div>
<div class="panel_title" align="left">Input</div><div class="panel_content">开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。</div><div class="panel_bottom"> </div>
<div class="panel_title" align="left">Output</div><div class="panel_content">如果序列相同则输出YES,否则输出NO
</div><div class="panel_bottom"> </div>
<div class="panel_title" align="left">Sample Input</div><div class="panel_content"><pre><div style="FONT-FAMILY: Courier New,Courier,monospace">2
567432
543267
576342
0</div>
 

Sample Output
YES NO
 

Source
 


#include <iostream>
#include <cstring>
#include <cstdio>
#include <stdlib.h>
using namespace std;

int a[30],b[30],cnt = 0;

typedef struct tree
{
    tree *l,*r;
    int num;
} tree;
tree *root;
tree *creat(int x)
{
    tree *t = (tree*)malloc(sizeof(tree));
    t->l = 0;
    t->r = 0;
    t->num = x;
    return t;
}

tree *inster(tree *s,int x)
{
    tree *t;
    if(s == NULL)
    {
        t = creat(x);
        s = t;
    }
    else
    {
        if(x <= s->num)
            s->l = inster(s->l,x);
        else
            s->r = inster(s->r,x);
    }
    return s;
}

void libian(tree *root)
{
    if(root!=NULL)
    {
        b[cnt++] = root->num;
        libian(root->l);
        libian(root->r);
    }
}

int main()
{
    int n;
    while(cin >> n,n)
    {
        cnt = 0;
        root = NULL;
        int tem;
        char str[30];
        cin >> str;
        int len = strlen(str),i;
        for(i = 0; i<len; i++)
        {
            tem = str[i] - '0';
            root = inster(root,tem);
        }
        libian(root);
        for(i = 0; i<len; i++)
            a[i] = b[i];
        while(n--)
        {
            cnt = 0;
            cin >> str;
            root = NULL;
            for(i = 0; i<len; i++)
            {
                tem = str[i] - '0';
                root = inster(root,tem);
            }
            libian(root);
            for(i = 0; i<len; i++)
                if(a[i]!=b[i])
                {
                    cout << "NO" << endl;
                    break;
                }
            if(i>=len)
                cout << "YES" << endl;
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

ACM常用数据结构小结与实现

应当说这段时间学习了很多的数据结构,也到了一个总结的时候。fotile96的这篇Blog非常值得推荐,我达不到这个高度,只能给自己和队友做些简单的归纳。   树状数组   非常简单的数据结构,...
  • mengxingyuanlove
  • mengxingyuanlove
  • 2015年06月09日 21:02
  • 3171

ACM基础 BFS入门

注释写的很详细哦 // 深度搜索利用队列走迷宫,求最短步数 // 题目大意: 有一个N*M的迷宫,地图上S代表起点,G代表终点,#代表墙无法通过,.代表路 // 求从起点到终点的最短距离,如果无法找...
  • u014235934
  • u014235934
  • 2016年03月14日 18:40
  • 682

【平衡二叉树】SBT学习笔记

醒目:文章部分内容来源于网络上的资料,感谢xkey(http://blog.csdn.net/acceptedxukai )、百度百科、神的不在场证明(http://www.cnblogs.com/z...
  • CreationAugust
  • CreationAugust
  • 2014年11月26日 17:47
  • 1003

hdu5444 Elven Postman(二叉树遍历)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5444 题目大意:给出一颗二叉树的先序遍历,默认的中序遍历是1.、2、……n。给出q个询问,询...
  • aaaaacmer
  • aaaaacmer
  • 2015年09月14日 17:00
  • 1267

数据结构之---C语言实现线索二叉树

数据结构之---C语言实现线索二叉树
  • u012965373
  • u012965373
  • 2015年06月26日 01:35
  • 1389

poj 3481 Double Queue(平衡二叉树基础练习题)

题意: 。。。 思路: 这道题用来作SBT的练习了。。。// SBT节点,固定域 l, r, sz // 需要一个key来比较大小 struct node { int l, r, sz,...
  • slowlight93
  • slowlight93
  • 2015年04月19日 00:15
  • 913

HDU 杭电 acm-2093-考试排名

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2093 /**********************************************...
  • winter2121
  • winter2121
  • 2017年02月05日 15:36
  • 638

浅谈数据结构和算法:二叉树

 歇了几天了,没有写博客。从今天开始要总结树和二叉树了。那么什么是树呢? 1,树的定义: 1)有且仅有一个特定的称为根Root的结点。 2)当n>1时,其余结点可分为m(m>0)个互不相交...
  • zxh2075
  • zxh2075
  • 2016年10月12日 15:25
  • 1031

【数据结构】二叉树的原理及实现学习总结

二叉树概述数组、向量、链表都是一种顺序容器,它们提供了按位置访问数据的手段。而很多情况下,我们需要按数据的值来访问元素,而不是它们的位置来访问元素,二叉树在很大程度上解决了这个问题,二叉树是按值来保存...
  • jianyuerensheng
  • jianyuerensheng
  • 2016年04月25日 09:46
  • 5110

hdu 1081 To The Max(最大子矩阵和)

To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total...
  • u011721440
  • u011721440
  • 2014年04月27日 10:46
  • 1033
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACM 数据结构-二叉树 HDU 3791二叉搜索树
举报原因:
原因补充:

(最多只允许输入30个字)