codeup模拟赛 进击的二叉查找数
问题 B: 进击的二叉查找树
题目描述
给定1~N的两个排列,使用这两个排列分别构建两棵二叉查找树(也就是通过往一棵空树中依次插入序列元素的构建方式)。如果这两棵二叉查找树完全相同,那么输出YES;否则输出NO。之后,输出第一个排列对应的二叉查找树的后序序列、层序序列。
输入
每个输入文件中一组数据。
第一行1个正整数N(1<=N<=30),表示二叉查找树中的结点个数。
接下来两行,代表1~N的两个排列。
输出
如果两个排列代表的二叉查找树完全相同,那么输出一行YES,否则输出一行NO。
接下来两行分别输出第一个排列对应的二叉查找树的后序序列、层序序列,整数之间用空格隔开。
每行末尾不允许有多余的空格。
样例输入
4 2 1 3 5
4 5 2 3 1
样例输出
1 3 2 5 4
4 2 5 1 3
代码:
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
int pos=0;
int BSTInsert(BiTree *t, int element)
{
if(NULL==*t)
{
(*t)=(BiTree)malloc(sizeof(BiTNode));
(*t)->data=element;
(*t)->lchild=(*t)->rchild=NULL;
return 1;
}
if(element==(*t)->data)
return 0;
if(element<(*t)->data)
return BSTInsert(&(*t)->lchild,element);
return BSTInsert(&(*t)->rchild,element);
}
void CreateBST(BiTree *t, int *a, int n)
{
(*t) = NULL;
for( int i=0; i<n; i++ )
BSTInsert(t,a[i]);
}
void PrintBST(BiTree t, int a[])
{
if(t)
{
PrintBST(t->lchild,a);
PrintBST(t->rchild,a);
a[pos]=t->data;
pos++;
}
}
bool isEqual(BiTree t1, BiTree t2)
{
if(t1==NULL&&t2==NULL)
return true;
else if(t1==NULL||t2==NULL)
return false;
else
{
if(t1->data!=t2->data)
return false;
else
{
bool isEqualLeft,isEqualRight;
isEqualLeft=isEqual(t1->lchild,t2->lchild);
isEqualRight=isEqual(t1->rchild,t2->rchild);
if(isEqualLeft&&isEqualRight)
return true;
else
{
isEqualLeft=isEqual(t1->lchild,t2->rchild);
isEqualRight=isEqual(t1->rchild,t2->lchild);
if(isEqualLeft&&isEqualRight)
return true;
else
return false;
}
}
}
}
void printLevel(BiTree t, int a[], int index)
{
queue<BiTree> q;
if(t!=NULL)
q.push(t);
BiTree b;
while(!q.empty())
{
b=q.front();
a[index]=b->data;
index++;
q.pop();
if(b->lchild)
q.push(b->lchild);
if(b->rchild)
q.push(b->rchild);
}
}
int main()
{
int n;
int *a,*b;
BiTree t1,t2;
scanf("%d", &n);
a=(int*)malloc(sizeof(int)*n);
b=(int*)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
scanf("%d",&b[i]);
CreateBST(&t1,a,n);
CreateBST(&t2,b,n);
if(isEqual(t1,t2))
printf("YES\n");
else
printf("NO\n"); PrintBST(t1,a);
printf("%d",a[0]);
for(int i=1;i<n;i++)
{
printf(" %d",a[i]);
}
printf("\n");
printLevel(t1,a,0);
printf("%d",a[0]);
for(int i=1;i<n;i++)
{
printf(" %d",a[i]);
}
printf("\n");
return 0;
}
codeup模拟赛 进击的二叉查找数的更多相关文章
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...
- NOIP2018 模拟赛(二十二)雅礼NOI
Preface 这次的题目都是NOI+的题,所以大家的分数都有点惨烈. 依靠T1大力骗分水到Rank2 所以想看正解的话看这里吧 A. 「雅礼NOI2018模拟赛(一) Day1」树 看一眼题目感觉十 ...
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根 ...
- 6.6 省选模拟赛 线段 二维数点问题 树套树 CDQ分治
LINK:线段 还是太菜了 没看出这道题真正的模型 我真是一个典型的没脑子选手. 考虑如何查询答案. 每次在一个线段x的状态被更改后 可以发现有影响的是 和x相连那段极长连续1子段. 设这个子段左端点 ...
- 团体程序设计天梯赛 L3-016. 二叉搜索树的结构
#include <cstdio> #include <cstdlib> #include <string.h> #include <math.h> # ...
- 【HHHOJ】NOIP2018 模拟赛(二十四) 解题报告
点此进入比赛 得分: \(100+60+100\)(挺好的,涨了一波\(Rating\)) 排名: \(Rank\ 1\) \(Rating\):\(+115\) \(T1\):[HHHOJ13]金( ...
- EZ 2018 06 24 NOIP2018 模拟赛(二十)
很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...
- EZ 2018 02 28 NOIP2018 模拟赛(二)
我TM的终于改完了(其实都是SB题) 题目链接:http://211.140.156.254:2333/contest/53 T1送分,T2前40%送分,还有骗分机制在里面,T3暴力50 所以200应 ...
- 蓝桥杯模拟赛 引爆炸弹-并查集+DFS
引爆炸弹 在一个 n×m的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地图上的所有炸弹, ...
随机推荐
- C#的常见算法(面试)
一.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+--+m //方法一,通过顺序规律写程序,同时也知道flag标志位的重要性. static int F1(int m) { ; ...
- SEO诊断之关于网站收录(转)
如何让网站被搜索引擎收录?我的网站有收录无排名怎么办?这些网站收录问题估计是seo最应关心的根本问题之一,网站收录都没有何来排名?我整理了每天咨询最多最具代表性的 8 个关于网站收录的问题及其答案统一 ...
- EduSoho程序上线实录
1.1 修改配置文件 [root@web01 nginx]# cat /application/nginx/conf/extra/edusoho.conf server { listen 80; se ...
- Sqoop的安装部署
在root的用户下 1):前提 安装JDK环境 2):前提 安装Hadoop和Hive客户端环境,如果需要导出到HBase则需要安装HBase客户端 3):下载sqoop : 命令: wget htt ...
- kafka单机模式部署安装,zookeeper启动
在root的用户下 1):前提 安装JDK环境,设置JAVA环境变量 2):下载kafka,命令:wget http://mirrors.shuosc.org/apache/kafka/0.10.2 ...
- [译]ASP.NET Core 2.0 视图组件
问题 如何在ASP.NET Core 2.0中使用视图组件? 答案 新建一个空项目,修改Startup类并添加MVC服务和中间件: public void ConfigureServices(ISer ...
- 如何创建 Swarm 集群?- 每天5分钟玩转 Docker 容器技术(95)
本节我们将创建三节点的 swarm 集群. swarm-manager 是 manager node,swarm-worker1 和 swarm-worker2 是 worker node. 所有节点 ...
- 手工搭建基于ABP的框架(3) - 登录,权限控制与日志
为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7695258.html 本篇将实现登录.权限控制.日志配置与审计日志的功能.首先我 ...
- 自己动手修改Robotium代码(下)
public void takeScreenshot(){ View decorView = viewFetcher.getRecentDecorView(viewFetcher.getWindo ...
- ssh简单配置
Port 2223Protocol 2HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_dsa_keyKeyRegeneration ...