当前位置:网站首页>【无标题】
【无标题】
2022-08-01 19:49:00 【疯疯癫癫才自由】
04-树4 是否同一棵二叉搜索树
分数 25
作者 陈越
单位 浙江大学
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。
输入格式:
输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和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 <iostream>
using namespace std;
typedef struct TNode* BinTree;
struct TNode
{
int data;
BinTree lchild,rchild;
};
BinTree NewNode(int val); //新建一个结点
BinTree Create(int *a,int n); //创建一棵树
void Insert(BinTree &BST,int val); //在树中插入一个值
bool Is_same(BinTree p,BinTree q); //判断两棵树是否相等,是同一棵二叉搜索树
int main()
{
int n,l;
while(scanf("%d",&n),n!=0)
{
scanf("%d",&l);
int a[n],b[n];
for(int i=0;i<n;++i)
scanf("%d",&a[i]);
BinTree p=Create(a,n);
while(l--)
{
for(int i=0;i<n;++i)
scanf("%d",&b[i]);
BinTree q=Create(b,n);
if(Is_same(p,q))
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}
BinTree NewNode(int val)
{
BinTree node=new TNode;
node->data=val;
node->lchild=node->rchild=NULL;
return node;
}
BinTree Create(int *a,int n)
{
BinTree BST=NULL;
for(int i=0;i<n;++i)
Insert(BST,a[i]);
return BST;
}
void Insert(BinTree &BST,int val)
{
if(BST==NULL)
{
BST=NewNode(val);
return;
}
if(val < BST->data)
Insert(BST->lchild,val);
else
Insert(BST->rchild,val);
}
bool Is_same(BinTree p,BinTree q)
{
if(p==NULL&&q==NULL) //如果两棵都是空树
return true;
else if(p==NULL || q==NULL) //如果有一棵是空树
return false;
else if(p->data!=q->data) //如果两棵树的根节点的数据域不相等
return false;
else return Is_same(p->lchild,q->lchild) && Is_same(p->rchild,q->rchild); //进行左右子树比较
}
边栏推荐
- 终于有人把AB实验讲明白了
- Tencent Cloud Hosting Security x Lightweight Application Server | Powerful Joint Hosting Security Pratt & Whitney Version Released
- [Server data recovery] Data recovery case of offline multiple disks in mdisk group of server Raid5 array
- DAO开发教程【WEB3.0】
- 我的驾照考试笔记(4)
- 专利检索常用的网站有哪些?
- 开源视界 | StreamNative 盛宇帆:和浪漫的人一起做最浪漫的事
- 研究生新同学,牛人看英文文献的经验,值得你收藏
- 图文详述Eureka的缓存机制/三级缓存
- MySQL开发技巧——并发控制
猜你喜欢
随机推荐
【七夕特别篇】七夕已至,让爱闪耀
MLX90640 Infrared Thermal Imager Temperature Measurement Module Development Notes (Complete)
Win11如何开启剪贴板自动复制?Win11开启剪贴板自动复制的方法
What are the application advantages of SaaS management system?How to efficiently improve the digital and intelligent development level of food manufacturing industry?
Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1
XSS range intermediate bypass
【周赛复盘】LeetCode第304场单周赛
密码学的基础:X.690和对应的BER CER DER编码
我的驾照考试笔记(3)
升哲科技携全域数字化方案亮相2022全球数字经济大会
Greenplum数据库源码分析——Standby Master操作工具分析
MySQL开发技巧——并发控制
58:第五章:开发admin管理服务:11:开发【管理员人脸登录,接口】;(未实测)(使用了阿里AI人脸识别)(演示了,使用RestTemplate实现接口调用接口;)
Pytorch模型训练实用教程学习笔记:四、优化器与学习率调整
专利检索常用的网站有哪些?
Ha ha!A print function, quite good at playing!
Intranet penetration lanproxy deployment
Creo5.0 rough hexagon is how to draw
面试突击70:什么是粘包和半包?怎么解决?
17. Load balancing