判断两序列是否为同一二叉搜索树序列
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,做的第一道二叉树题目!

-----江财小子

转载于:https://www.cnblogs.com/372465774y/archive/2012/03/28/2421684.html

二叉搜索树(HDU3791)相关推荐

  1. HDU3791 二叉搜索树【二叉搜索树】

    二叉搜索树 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. HDU3791(二叉搜索树)

    这道题的主要是理解二叉搜索树的构建:当根不为空的时候,注意是左边的节点值都小于根节点值,右边的节点值都大于根节点值. #include<iostream> #include<algo ...

  3. 【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结

    动态管理集合的数据结构--二叉搜索树 搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列. 二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树. (1)若它 ...

  4. LeetCode简单题之二叉搜索树的最小绝对差/最小距离

    题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 差值是一个正数,其数值等于两值之差的绝对值. 示例 1: 输入:root = [4,2,6,1,3] 输出: ...

  5. LeetCode简单题之二叉搜索树的范围和

    题目 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例 1: 输入:root = [10,5,15,3,7,null,18], low = 7, ...

  6. 【剑指Offer】23、二叉搜索树的后序遍历序列

      题目描述:   输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   解题思路:   对于后续遍历序列,序 ...

  7. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  8. 剑指offer:面试题36. 二叉搜索树与双向链表

    题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: ...

  9. 剑指offer:面试题33. 二叉搜索树的后序遍历序列

    题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜 ...

最新文章

  1. A.CPP (blur.CPP)如何调用B.CPP (zeros.cpp)中定义的方法
  2. 好惨!程序员修电脑遇到了人生滑铁卢 | 每日趣闻
  3. 通俗介绍拉普拉斯变换,傅里叶变换和z变换
  4. Word文档处理控件TX Text Control .NET for WPF
  5. 【OpenCV】目标检测
  6. 从 0 经验到成为全球第一模组生产商,日海智能的「非典型」物联网之路
  7. [转载] numpy.arctan, math.atan, math.atan2的区别
  8. Delphi中Format与FormatDateTime函数详解
  9. 谷歌android q 安装,谷歌修复了Pixel智能机安装Android Q Beta 4后循环重启的bug
  10. .arx 与此版本的 AutoCAD 不兼容。
  11. .net core 中使用httpclient下载文件
  12. 简述冯诺依曼体系结构计算机的工作原理。
  13. SAP中通过删除新建未记账成本要素期间的方式更改成本要素类别
  14. 使用Bugzilla,你肯定会遇到的坑。
  15. feignclient time out
  16. 京冀津城际铁路网规划大全
  17. 【简简单单来个spider小案例吧】获取emoji表情包
  18. PopupWindow 监听返回键
  19. 倒排索引、正排索引,以及ElasticSearch对倒排索引的优化方法
  20. dalao的背包九讲

热门文章

  1. MongoDB基本语法和操作入门
  2. matlab将txt数据分类,MATLAB读取txt文件,txt里面有字符串和数值两种类型
  3. 案例学习BlazeDS+Spring之十:Chat(
  4. eclipse安装Maven插件M2E
  5. pcm输出还是源码输出_LOL手游:上单英雄怎么选?还是推荐玩“狗头”,有肉又有输出...
  6. python excel插件_django使用插件下载excel的方法
  7. java第十版基础篇答案第九章_《Java语言程序设计》(基础篇原书第10版)第九章复习题答案...
  8. python学爬虫还是人工_本人初二生,学习Python爬虫,要不要继续深入学习啊?
  9. 牛客寒假算法基础训练营5
  10. PyTorch的hook及其在Grad-CAM中的应用