给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。

输入格式:

输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需要检查的序列。

简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。

输出格式:

对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。

输入样例:

4 2
3 1 4 2
3 4 1 2
3 2 4 1
2 1
2 1
1 2
0

输出样例:

Yes
No
No
#include<cstdio>
#include<cstdlib>
typedef struct TreeNode* Tree;
struct TreeNode{int v;Tree left,right;int flag;
};Tree NewNode(int v){Tree T = (Tree)malloc(sizeof(struct TreeNode));T->v = v;T->left = T->right = NULL;T->flag = 0;return T;
}Tree Insert(Tree T,int v){if(!T) T = NewNode(v);else{if(v > T->v) T->right = Insert(T->right,v);else T->left = Insert(T->left,v);}return T;
}Tree MakeTree(int n){Tree T;int i,v;scanf("%d",&v);T = NewNode(v);for(int i = 1; i < n; i++){scanf("%d",&v);T = Insert(T,v);}return T;
}int check(Tree T,int v){if(T->flag){if(v > T->v) return check(T->right,v);else if(v < T->v) return check(T->left,v);else return 0;}else{if(v==T->v){T->flag = 1;return 1;}else return 0;}
}int Judge(Tree T,int n){int i,v,flag = 0;scanf("%d",&v);if(v != T->v) flag = 1;else T->flag = 1;for(i = 1; i < n; i++){scanf("%d",&v);if((!flag)&&(!check(T,v))) flag = 1;}if(flag) return 0;else return 1;
}void Reset(Tree T){if(T->left) Reset(T->left);if(T->right) Reset(T->right);T->flag = 0;
}void FreeTree(Tree T){if(T->left) FreeTree(T->left);if(T->right) FreeTree(T->right);free(T);
}int main(){int i,n,l;Tree T;scanf("%d",&n);while(n){scanf("%d",&l);T = MakeTree(n);for(i = 0; i < l; i++){if(Judge(T,n)) printf("Yes\n");else printf("No\n");Reset(T);}FreeTree(T);scanf("%d",&n);}return 0;
}

转载于:https://www.cnblogs.com/wanghao-boke/p/10409352.html

04-树4 是否同一棵二叉搜索树 (25 分)相关推荐

  1. 5-4 是否同一棵二叉搜索树 (25分)

    https://pta.patest.cn/pta/test/15/exam/4/question/712 这道题考察二叉搜索树的实现,并且还需要一定的逻辑与算法,所以题目还是挺好的. 5-4 是否同 ...

  2. 7-4 是否同一棵二叉搜索树 (25 分)

    是否同一棵二叉搜索树 1.题目描述: 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入 ...

  3. 7-1 是否同一棵二叉搜索树 (30分)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  4. 7-4是否同一棵二叉搜索树(不建树)

    什么是二叉搜索树? 1.节点的左子树只包含小于当前节点的数. 2.节点的右子树只包含大于当前节点的数. 3.所有左子树和右子树自身必须也是二叉搜索树. 7-4 是否同一棵二叉搜索树 (25分) 给定一 ...

  5. 数据结构:判断是否为同一棵二叉搜索树

    前言碎语 作为一个代码小白,在自学的过程中,最舒服的好像就是有讲解.有提示.甚至直接是有源码--然而,照着写永远是无法进步的,因为,很可能最后错了自己都不知道错在了哪! 就比如下面这个,照着MOOC小 ...

  6. 是否同一棵二叉搜索树_如何在同一台计算机上安装Java的多个版本

    是否同一棵二叉搜索树 一段时间以前,我写了一篇文章< 用示例解释Java Lambda表达式>,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它. 但 ...

  7. 笛卡尔树 (25 分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字

    立志用最少的代码做最高效的表达 笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大.其次所有结点的 ...

  8. 基础数据结构——是否同一棵二叉搜索树

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  9. LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target. 如果可以找到返回 True,否则返回 False. 示 ...

最新文章

  1. C语言科学计算器思路,大神教你如何用C语言实现科学计算器
  2. python3的数据类型以及模块的含义
  3. 编译原理学习笔记一(待续)
  4. apple air装双系统(win7)
  5. 1003 Express Mail Taking
  6. 8条嵌入式C语言编程小知识总结
  7. php打开网页执行即执行bat程序_CVE202011107:XAMPP任意命令执行漏洞复现
  8. 从留存的本质出发,制定留存策略
  9. 目标检测(二十三)--DenseBox
  10. 帮一个同学解决get请求的ajax上传数据,数据放在data里
  11. NPAPI:JS的Number,在接口中可能是int32,也可能是double
  12. POJ 3253.Fence Repair
  13. python数据分析18-21
  14. Data Base学习记录:ODL
  15. 单片机中code、data、idata、xdata等关键字意思
  16. win10配置计算机时强制关机,老鸟讲解Win10设置远程系统强制关机的详尽处理要领...
  17. 素数算法,看看电脑是怎么找素数的
  18. Redis缓存及缓存粒度
  19. 为什么国内搜索不到国外服务器网站?
  20. Visual Studio 2017安装使用方法

热门文章

  1. 总结get和post区别
  2. 初识openstack
  3. Android官方培训课程中文版(v0.9.5)
  4. 为移动端网页构造快速响应按钮
  5. 无线智能路由器家长控制宽带
  6. 红帽企业版linux 7.4更新启动,红帽Linux企业版7.4 淘汰Btrfs文件系统
  7. aix java home_java程序员工作日子一(java_home 配置)
  8. python类属性的调用方法_问一个关于PYTHON类属性调用方法的问题
  9. 剑灵系统推荐加点_剑灵重制修炼系统 无定式加点打造自我风格
  10. matlab 小波 cdd,[Matlab] 单导联心电数据的小波(包)消噪及压缩