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的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地图上的所有炸弹, ...
随机推荐
- LeetCode 190. Reverse Bits (反转位)
Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...
- js判断元素滑动方向(上下左右)移动端
每天学习一点点. 1 var startx, starty; //获得角度 function getAngle(angx, angy) { return Math.atan2(angy, angx) ...
- SSM框架中的注解,配置和控制器相关笔记
常规SSM实例 探索SSM理论的前提,应该是在对框架基础的运作方式有一定了解,以下是个人Android后台项目,用SSM框架快速搭建,以下是代码,主要 观察结构. 代码结构: model实体类 Ida ...
- Leetcode题解(21)
62. Unique Paths 题目 分析: 机器人一共要走m+n-2步,现在举个例子类比,有一个m+n-2位的二进制数,现在要在其中的m位填0,其余各位填1,一共有C(m+n-2,m-1)种可能, ...
- CodeForces - 385C Bear and Prime Numbers (埃氏筛的美妙用法)
Recently, the bear started studying data structures and faced the following problem. You are given a ...
- Java一点输入输出技巧
输入: 格式1:Scanner sc = new Scanner(System.in); 格式2:Scanner sc = new Scanner(new BufferedInputStream(Sy ...
- js 立即调用的函数表达式
当你声明类似function foo(){}或var foo = function(){}函数的时候,通过在后面加个括弧就可以实现自执行,例如foo(),看代码: // 因为想下面第一个声明的func ...
- HTML5 Geolocation API工作原理[转载]
大家都知道,HTML5 Geolocation 可以使用 IP 地址.基于 Web 的数据库.无线网络连接和三角测量或 GPS 技术来确定经度和纬度. 问题: 在一个基于地理位置服务的个人业余项目(小 ...
- CSS fliter
Filters主要是运用在图片上,以实现一些特效.(也能运用于video上),类似滤镜效果 img { -webkit-filter:grayscale(1); } gr ...
- Samba服务安装及配置
服务器环境:CentOS6.9 Linux 2.6.32-696.10.1.el6.x86_64 安装Samba服务 过程中会安装3个服务smb(文件.打印共享服务,使用139.445端口).nmb( ...