是否同一棵二叉搜索树

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

相关文章

perl mysql dml_MySQL Connector执行SQL语句的三种方式

描述当我们需要在Java程序中与数据库进行交互&#xff0c;可能首先想到的是使用某个ORM框架&#xff0c;因为ORM框架封装了一些实现细节&#xff0c;在使用上非常方便&#xff0c;并且一定程度上可以提升代码稳定性。在ORM框架中&#xff0c;都会依赖MySQL Connector包&#xf…

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

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

mysql数据库设计三大范式_数据库设计三大范式详解

引言数据库的设计范式是数据库设计所需要满足的规范&#xff0c;满足这些规范的数据库是简洁的、结构明晰的&#xff0c;同时&#xff0c;不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟&#xff0c;不仅给数据库的编程人员制造麻烦&#xff0c;…

Broadcast简单使用

Activity Service之间的通信单用intent有时候还是不能满足要求&#xff0c;毕竟intent只能在启动一个activity的时候传一点消息过去 这个时候就用到广播了&#xff0c;至此&#xff0c;四大组件Activity Broadcast Service ContentProvider中终于用过三个了。。。当然目前只是…

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

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

Windows + Ubuntu下JDK与adb/android环境变量配置完整教程

假设JDK和android sdk路径分别如下&#xff1a; D:\Program Files\Java\jdkD:\android-sdk 1.JDK环境变量配置JAVA_HOMED:\Program Files\Java\jdk path%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; classpath,;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar &a…

python制作界面怎么触发事件_python模拟事件触发机制详解

本文实例为大家分享了python模拟事件触发机制的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下EventManager.py# -*- encoding: UTF-8 -*-# 系统模块from queue import Queue, Emptyfrom threading import *class EventManager:def __init__(self):"""…

python 格式化工具_小而美的 Python 格式化工具--black

Black号称不妥协的代码格式化工具&#xff0c;为什么叫不妥协呢&#xff1f;因为它检测到不符合规范的代码风格直接就帮你全部格式化好&#xff0c;根本不需要你确定&#xff0c;直接替你做好决定。它也是 requests 作者最喜欢的工具之一.使用非常简单&#xff0c;安装成功后&a…

常用英语短语收集1

1、are you fucking kiding me&#xff1f; 转载于:https://www.cnblogs.com/badboys/p/8729474.html

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

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

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

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

冲刺no.4

项目:ccsu小助手 角色:用户 访问链接:http://47.93.57.6:8888/login/ 目的(Purpose) ccsu小助手是一款面向长沙学院所有学生、老师、学校部门、校园的账户信息输出类产品&#xff0c;部门可以通过和本系统负责人签订产品使用协议&#xff0c;申请集成使用该产品 对应网页使用权…

java web 开发基础_javaweb开发基础(一)

001使用MyEclispe建立web工程我的建立在D盘WebAPP这个目录下在myeclipse中启动Tomcat&#xff0c;在浏览器中输入http://localhost:8080/&#xff0c;如果不出意外的话&#xff0c;会出现白板&#xff0c;说明Tomcat启动成功。这篇文档则详细的说明了如何在MyEclipse下部署一个…

python如何处理视频_OpenCV-Python系列之视频处理入门

视频处理在OpenCV中处于极为重要的地位&#xff0c;目标实时跟踪等各种实时图像处理算法都是以视频为基础。从相机捕获视频首先我们来了解一下使用电脑自带的相机来进行捕获视频。通常&#xff0c;我们必须使用摄像机捕获实时流。OpenCV提供了一个非常简单的界面来执行此操作。…

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

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

java-线程-生产者-消费者

概述 在Java中有四种方法支持同步&#xff0c;其中前三个是同步方法&#xff0c;一个是管道方法。 wait() / notify()方法 await() / signal()方法 BlockingQueue阻塞队列方法 PipedInputStream / PipedOutputStream wait() / notify()方法 public class Storage {private fina…

如何用python做计算软件_如何用Python写一个计算器软件 附带效果图

1 import tkinter #导入tkinter模块23 root tkinter.Tk()4 root.minsize(280,500)5 root.title(李蛟龙的计算器)678 #1.界面布局9 #显示面板10 result tkinter.StringVar()11 result.set(0) #显示面板显示结果1&#xff0c;用于显示默认数字012 result2 tkinter.StringVar() #…

BI之报表测试总结

报表测试总结: 1、测试准备工作&#xff1a; 数据准备 保证足够多的有效数据 清楚报表中涉及到的算法、公式 清楚业务功能接口 2、报表测试点 基本测试点&#xff1a;界面、控件、格式、布局、明显的数据错误、js报错、报表标题&#xff0c;报表整体风格&#xff0c;翻页&#…

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

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

python 连续三个数满足条件_计算满足条件的连续值数(Pandas Dataframe)

这是一个带有^{}-# https://stackoverflow.com/a/52718782/ Divakardef maxisland_start_len_mask(a, fillna_index -1, fillna_len 0):# a is a boolean arraypad np.zeros(a.shape[1],dtypebool)mask np.vstack((pad, a, pad))mask_step mask[1:] ! mask[:-1]idx np.fl…