04-树4 是否同一棵二叉搜索树 (25 分)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{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 分)相关推荐
- 5-4 是否同一棵二叉搜索树 (25分)
https://pta.patest.cn/pta/test/15/exam/4/question/712 这道题考察二叉搜索树的实现,并且还需要一定的逻辑与算法,所以题目还是挺好的. 5-4 是否同 ...
- 7-4 是否同一棵二叉搜索树 (25 分)
是否同一棵二叉搜索树 1.题目描述: 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入 ...
- 7-1 是否同一棵二叉搜索树 (30分)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- 7-4是否同一棵二叉搜索树(不建树)
什么是二叉搜索树? 1.节点的左子树只包含小于当前节点的数. 2.节点的右子树只包含大于当前节点的数. 3.所有左子树和右子树自身必须也是二叉搜索树. 7-4 是否同一棵二叉搜索树 (25分) 给定一 ...
- 数据结构:判断是否为同一棵二叉搜索树
前言碎语 作为一个代码小白,在自学的过程中,最舒服的好像就是有讲解.有提示.甚至直接是有源码--然而,照着写永远是无法进步的,因为,很可能最后错了自己都不知道错在了哪! 就比如下面这个,照着MOOC小 ...
- 是否同一棵二叉搜索树_如何在同一台计算机上安装Java的多个版本
是否同一棵二叉搜索树 一段时间以前,我写了一篇文章< 用示例解释Java Lambda表达式>,但是我很容易浏览Java 8,因为我在项目中使用了Java 8,并且允许我安装和使用它. 但 ...
- 笛卡尔树 (25 分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字
立志用最少的代码做最高效的表达 笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大.其次所有结点的 ...
- 基础数据结构——是否同一棵二叉搜索树
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)
文章目录 1. 题目 2. 解题 1. 题目 给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值 Target. 如果可以找到返回 True,否则返回 False. 示 ...
最新文章
- C语言科学计算器思路,大神教你如何用C语言实现科学计算器
- python3的数据类型以及模块的含义
- 编译原理学习笔记一(待续)
- apple air装双系统(win7)
- 1003 Express Mail Taking
- 8条嵌入式C语言编程小知识总结
- php打开网页执行即执行bat程序_CVE202011107:XAMPP任意命令执行漏洞复现
- 从留存的本质出发,制定留存策略
- 目标检测(二十三)--DenseBox
- 帮一个同学解决get请求的ajax上传数据,数据放在data里
- NPAPI:JS的Number,在接口中可能是int32,也可能是double
- POJ 3253.Fence Repair
- python数据分析18-21
- Data Base学习记录:ODL
- 单片机中code、data、idata、xdata等关键字意思
- win10配置计算机时强制关机,老鸟讲解Win10设置远程系统强制关机的详尽处理要领...
- 素数算法,看看电脑是怎么找素数的
- Redis缓存及缓存粒度
- 为什么国内搜索不到国外服务器网站?
- Visual Studio 2017安装使用方法
热门文章
- 总结get和post区别
- 初识openstack
- Android官方培训课程中文版(v0.9.5)
- 为移动端网页构造快速响应按钮
- 无线智能路由器家长控制宽带
- 红帽企业版linux 7.4更新启动,红帽Linux企业版7.4 淘汰Btrfs文件系统
- aix java home_java程序员工作日子一(java_home 配置)
- python类属性的调用方法_问一个关于PYTHON类属性调用方法的问题
- 剑灵系统推荐加点_剑灵重制修炼系统 无定式加点打造自我风格
- matlab 小波 cdd,[Matlab] 单导联心电数据的小波(包)消噪及压缩