是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{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

AC代码

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 
  5 typedef struct TreeNode *BT;
  6 struct TreeNode{
  7   int data;
  8   BT right;
  9   BT left;
 10   int flag;
 11   
 12 };
 13 BT insertNode(BT T,int temp){
 14   if(!T){
 15     T = (BT)malloc(sizeof(struct TreeNode));
 16     T->data = temp;
 17     T->left = T->right =NULL;
 18     T->flag = 0;
 19   }else 
 20     if(temp < T->data){
 21       T->left = insertNode(T->left,temp);
 22     }else if(temp > T->data){
 23       T->right = insertNode(T->right,temp);
 24     }
 25   return T;
 26 }
 27 
 28 BT buildTree(int N){
 29   BT T = NULL;
 30   int temp;
 31   for(int i = 0; i < N; i++){
 32     scanf("%d",&temp);
 33     T = insertNode(T,temp);
 34   }
 35   return T;
 36 }
 37 int FindandChange(BT T,int temp){
 38   if(!T){
 39     return 0;
 40   }
 41   if(T->data == temp){
 42     T->flag = 1;
 43     return 1;
 44   }else 
 45     if(!T->flag){
 46      return 0;
 47     }else if(T->data > temp){
 48       FindandChange(T->left,temp);
 49     }else{
 50       FindandChange(T->right,temp);
 51     }
 52   
 53 }
 54 
 55 
 56 void IsSameBST(BT T,int N){
 57   int flag = 1;
 58   int temp;
 59   for(int i = 0; i < N; i++){
 60     scanf("%d",&temp);
 61     if(flag){
 62       flag = FindandChange(T,temp);
 63     }
 64   }
 65   if(flag){
 66     printf("Yes\n");
 67   }else{
 68     printf("No\n");
 69   }
 70 }
 71 
 72 
 73 void reSetflag(BT T){
 74   if(!T){
 75     return;
 76   }
 77   T->flag = 0;
 78   reSetflag(T->left);
 79   reSetflag(T->right);
 80 }
 81 void freeBST(BT T){
 82   if(!T){
 83     return;
 84   }
 85   freeBST(T->left);
 86   freeBST(T->right);
 87   free(T);
 88 }
 89 int main(){
 90   int N,k;
 91   scanf("%d",&N);
 92   while(N){
 93     scanf("%d",&k);
 94     BT T;
 95     T = buildTree(N);
 96     for(int i = 0; i < k; i++){
 97       IsSameBST(T,N);
 98       reSetflag(T);
 99     }
100     freeBST(T);
101     scanf("%d",&N);
102   }
103   return 0;
104 }

 



转载于:https://www.cnblogs.com/jinjin-2018/p/8718648.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改软件许可证使用时间_阮一峰:为什么开源数据库改变许可证?

CockroachDB 是一个开源的分布式数据库&#xff0c;最近改变了代码授权&#xff0c;放弃了 Apache 许可证。许多开源数据库这一两年都改变了授权&#xff0c;比如 Confluent、Elastic 、MongoDB、Redis Labs、TimescaleDB。本文分析这种现象。一、CockroachDB 的许可证变更Cock…

线程 sleep 取消_C/C++ 多线程机制

一、C/C多线程操作说明C/C多线程基本操作如下&#xff1a; 1. 线程的建立结束 2. 线程的互斥和同步 3. 使用信号量控制线程 4. 线程的基本属性配置 在C/C代码编写时&#xff0c;使用多线程机制&#xff0c;首先需要做的事情就是声明引用&#xff0c;具体如下&#xff1a;#inclu…

事务java_Java事务之一——Java事务的基本问题

Java中的事务处理有多简单&#xff1f;在使用EJB时&#xff0c;事务在我们几乎察觉不到的情况下发挥着作用&#xff1b;而在使用Spring时&#xff0c;也只需要配置一个TransactionManager&#xff0c;然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以…

seo模拟点击软件_浅谈百度SEO快排是什么、原理、如何判断及应对

前言&#xff1a;以前我说过不准备写这个快排&#xff0c;一是我自己的网站没有操作过所谓的快排 &#xff0c;二是我并不能像网上很多写的揭秘百度快排(说实话&#xff0c;你都能揭秘的方法了&#xff0c;还真的很有用吗?真正懂的人都在低调赚money)。我只是站在一个小白角度…

100多年了,左右大脑的不对称性依然备受关注

来源&#xff1a;brainnews1&#xff0c;不对称的视角下的大脑偏侧化关于大脑不对称性的比较研究最早可以追溯到19世纪&#xff0c;但由于早期认为偏侧化为人类所独有&#xff0c;因此该领域的研究一度消失。这一领域在20世纪70年代重新出现&#xff0c;使我们了解到脑和行为的…

经由因果分析,反驳AI监控学生上课,及辨别健康类谣言

来源&#xff1a;混沌巡洋舰想象这样一个场景&#xff0c;你和你心爱的女孩一起自习&#xff0c;你的理科好&#xff0c;于是你看着她听数学的网课时&#xff0c;有时露出困惑的表情&#xff0c;还有时会走神。然后等她听完&#xff0c;你再把你觉得她没有听懂的部分&#xff0…

java controller json_springMVC的controller层接收前端json数据

1.前端的操作&#xff1a;对象接收json数据方式&#xff1a;将所需要传的数据转化为json数据&#xff0c;并将这些数据以post方式传到后台的controller层&#xff0c;然后controller层接收json数据&#xff0c;并且是以对象的形式进行接收。这里面是springmvc自动控制将这些数据…

里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白

来源&#xff1a;雷锋网作者 | 付静1 代表着首次&#xff0c;标志着政府与企业持续合作前往国际空间站的开始。终于&#xff0c;美国太空探索技术公司&#xff08;SpaceX&#xff09;的首次正式载人飞行任务拉开大幕&#xff01;美东时间 2020 年 11 月 15 日 19 时 27 分&…

取文字_把这4个字母输入word,会得到一段神秘文字,承载着一段历史

在英文的输入状态下&#xff0c;把“ rand()”输入word后&#xff0c;按下回车键&#xff0c;就会突然跳出一页文字把“ rand()”输入excel后&#xff0c;按下回车键&#xff0c;则会得到这样的结果&#xff0c;0.134582最后再把“ rand()”输入PPT&#xff0c;按下回车键&…

一文看懂数字孪生,工信部权威白皮书

来源&#xff1a;智东西11月11日消息&#xff0c;《由商务部、科技部、工信部、国家发改委、农业农村部、国家知识产权局、中国科学院、中国工程院等部委和深圳市人民政府共同举办的中国国际高新技术成果交易会正式开幕。作为大会主会场的重要组成部分&#xff0c;由工信部下属…

linux -- control service and daemon process

linux -- control service and daemon process 一、几个重要概念的讲解 1、systemd 系统启动和服务器进程由 systemd 系统和服务管理器进行管理 此程序提供一种方式&#xff0c;可以在启动时和运行中的系统上激活系统资源、服务器守护进程和其他进程 2、守护进程 守护进程是在执…

基于人工智能智商研究的智能定律初探

什么是智能和意识一直是智能科学领域最基础也是最具有争议的问题&#xff0c;2014年以来&#xff0c;我们在对人机通用智能发展水平的进行研究时提出了标准智能模型&#xff0c;统一描述人和智能机器的特征。在这个研究的基础上&#xff0c;2020年5月我们在《Annals of Data》发…

Postman----Presets(预先设置)的使用

使用场景&#xff1a; 当我们在进行接口测试post请求时&#xff0c;headers是必填项&#xff0c;我们将一个A接口的headers编写后测试完成&#xff0c;再次进行B接口的测试&#xff0c;需重新编写headers&#xff0c;为了简单操作&#xff0c;我们就用到了Presets。 Presets 作…

opengl 如何加阴影_OpenGL + Qt: 3 - 旋转动画和键盘操纵

前三篇链接&#xff1a;OpenGL Qt: 0 - 三角形绘制 OpenGL Qt: 1 - 用下拉框选颜色 OpenGL Qt: 2 - 走向3D&#xff0c;画正四面体 这一周笔者经历了漫长的洲际飞行和昏天黑地的倒时差&#xff0c;所以本篇内容相对少一些&#xff0c;侧重 Qt 而不是 OpenGL。在上一篇中&…

2020十大新兴技术揭晓!每一项都可能颠覆我们的生活

转自丨科技日报作者丨张佳欣编辑丨翟丽影全世界都在竞相研发新冠肺炎疫苗&#xff0c;前景令人鼓舞&#xff0c;我们可能会在破纪录的时间内研发出疫苗。但在未来新冠疫情仍在蔓延的情况下&#xff0c;技术能帮助我们更快地实现目标吗?世界经济论坛和《科学美国人》杂志本月10…

c#_导出table功能

一&#xff1a;第一张导出方法&#xff0c;简单快捷 请注意&#xff1a;一般表格都有真分页&#xff0c;查询数据时候注意把分页条件去掉#region 此处是获取的list数组 然后转table再调用ExportExcel var list"你的list数据库源"DataTable dt new DataTable();dt.…

RISC-V的自定义CPU悖论

来源&#xff1a;内容编译自「eejournal」&#xff0c;谢谢。随着这些年的发展&#xff0c;RISC-V的受重视程度与与日俱增。这主要因为它是免费的、灵活的&#xff0c;并且速度很快。这使RISC-V成为许多开发人员的安全便捷选择。但是您会认为RISC-V是通用RISC处理器还是定制的随…

华为宣布出售荣耀,声明来了

来源&#xff1a;澎湃新闻综合华为官网、《深圳特区报》今天&#xff0c;华为发表声明&#xff0c;整体出售荣耀业务资产。对于交割后的荣耀&#xff0c;华为不占有任何股份&#xff0c;也不参与经营管理与决策。11月17日一早&#xff0c;荣耀最终的出售方案公布。多家企业在《…

边缘计算4.0正急速驶来,你做好准备了吗?

物联网智库 整理发布导 读近十年间&#xff0c;各行各业的企业都经历着数字化技术和产品对传统生产经营模式的冲击。人工智能、大数据、区块链、自动化等技术的日渐完善&#xff0c;让企业的生产效率和业务模式发生了翻天覆地的变化。

运维-替换-修改kibana徽标

作为一名纯运维人员&#xff0c;想更改kibana的徽标。 并不能像开发一样去看源码并修改源码。 所以我们可以替换徽标。 先来一个效果图。我的版本是5.5.1。 具体的修改过程&#xff1a; 在kibana安装路径下面。 optimize/bundles/ 0cebf3d61338c454670b1c5bdf5d6d8d.svg 这…