【二叉搜索树】PAT-天梯赛- L2-004. 这是二叉搜索树吗?
——————————————最后自己动手画画,举几个简单的栗子来证明一下自己的猜测,代码里适当地添加了注释了,看不懂了就再点开看看————————————————
AC代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<string>
#include<map>
#define maxn 400000
#define inf 0x3f3f3f3f
using namespace std;
#define N 1008
typedef struct Bitnode{
int data;
struct Bitnode *lchild;
struct Bitnode *rchild;
}Abitnode,*bitree;
int n,n2,n3;
int num[N],num2[N],num3[N];
int n4,ans[N];//存储答案
void insertbitree(bitree *T,int num){
if(*T==NULL){
*T=(bitree)malloc(sizeof(Abitnode));
(*T)->data=num;
(*T)->lchild=NULL;
(*T)->rchild=NULL;
return ;
}
if((*T)->data > num){
insertbitree(&(*T)->lchild,num);//左子树严格小于根节点的值
}else{
insertbitree(&(*T)->rchild,num);
}
}
void fact2(bitree *T){//按照先序遍历,二叉搜索树:左子树严格小
if((*T)!=NULL){
num2[++n2]=(*T)->data;
fact2(&(*T)->lchild);
fact2(&(*T)->rchild);
}
return ;
}
void fact3(bitree *T){//按照先序遍历,二叉搜索树的镜像:右子树严格小
if((*T)!=NULL){
num3[++n3]=(*T)->data;
fact3(&(*T)->rchild);
fact3(&(*T)->lchild);
}
return ;
}
bool judge(int a[],int b[]){
for(int i=;i<=n;i++)
if(a[i]!=b[i])
return false;
return true;
}
void post_print2(bitree *T){//后续遍历输出二叉搜索树,存到ans中
if(*T!=NULL){
post_print2(&(*T)->lchild);
post_print2(&(*T)->rchild);
ans[++n4]=((*T)->data);
}
}
void post_print3(bitree *T){//后续遍历输出镜像,存到ans中
if(*T!=NULL){
post_print3(&(*T)->rchild);
post_print3(&(*T)->lchild);
ans[++n4]=((*T)->data);
}
}
void print_ans(){
printf("YES\n");
for(int i=;i<=n;i++){
if(i==n)
printf("%d\n",ans[i]);
else
printf("%d ",ans[i]);
}
return ;
}
int main(){
bitree T;
while(scanf("%d",&n)!=EOF){//既然是前序遍历,第一个点铁定是根节点
T=NULL;
for(int i=;i<=n;i++){//按照前序遍历的顺序
scanf("%d",&num[i]);
insertbitree(&T,num[i]);
}
n2=;
fact2(&T);
n3=;
fact3(&T);
n4=;
if(judge(num,num2)){//如果是二叉搜索树
post_print2(&T);
print_ans();
}
else if(judge(num,num3)){//如果是二叉搜索树的镜像
post_print3(&T);
print_ans();
}
else{
printf("NO\n");
}
}
return ;
}
/*
题目思路:1、正常按二叉树进行建立,然后按照规则进行搜索——OK!;
2、404!
*/
【二叉搜索树】PAT-天梯赛- L2-004. 这是二叉搜索树吗?的更多相关文章
- PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
- PAT 天梯赛 L1-017. 到底有多二 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-017 AC代码 #include <iostream> #include <cstdio&g ...
- PAT 天梯赛 是否同一棵二叉搜索树 (25分)(二叉搜索树 指针)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- PAT天梯赛 L1-049 天梯赛座位分配
题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...
- PAT天梯赛L3-007 天梯地图
题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...
- PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
- PAT 天梯赛 L2-004 这是二叉搜索树吗?
递归判断+建树 题目链接:https://www.patest.cn/contests/gplt/L2-004 题解 二叉搜索树的特点就是其根节点的值是位于左右子树之间的,即大于左子树的所有值,但是小 ...
- PAT天梯赛L2-004 这是二叉搜索树吗【递归】
L2-004. 这是二叉搜索树吗? 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一棵二叉搜索树可被递归地定义为具有下列性质的 ...
- PAT 天梯赛 是否完全二叉搜索树 (30分)(二叉搜索树 数组)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...
- PAT 天梯赛 L3-010. 是否完全二叉搜索树 【Tree】
题目链接 https://www.patest.cn/contests/gplt/L3-010 思路 因为是 完全二叉搜索树 可以用 数据 建树的方式 然后 遍历一遍这个 数字 就是 层序遍历 遍历的 ...
随机推荐
- SQL在线自助查询
数据的日常查询统计分析是高频的需求,然而生产数据库由于安全.管理等方面的要求,仅仅对部分人员开发,例如DBA,总监等, 其他人员都要通过DBA才能查询数据,十分不便. 为了让DBA免于日常繁琐的工作, ...
- css 修改placeholder样式
input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...
- [转帖]再谈IO的异步,同步,阻塞和非阻塞
再谈IO的异步,同步,阻塞和非阻塞 https://yq.aliyun.com/articles/53674?spm=a2c4e.11155435.0.0.48bfe8efHUE8wg krypt ...
- lnmp+tp5安装纪要
1: lnmp : https://lnmp.org/install.html 官网安装帮助 运行命令:wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz ...
- Ribbon【自定义客户端】
Ribbon的加载策略是懒加载,即第一次请求的时候才加载对应上下文,正是这个原因,很多时候第一次调用显得很慢,甚至会超时,所以,可以通过指定ribbon具体服务名称来开启饿加载,即在工程启动的时候,加 ...
- 剑指offer55:链表中环的入口结点
1 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 2 思路和方法 这是一个典型的链表中查找环的问题,基本思路是,首先设置两个快慢指针slow和fast,并且快指 ...
- vue导入css,js和放置html代码
使用场景:我是从网上找的html前端页面模板,导入找的模板中的css和js到vue中使用. 1.在main.js中全局导入css和js import '@/assets/css/main.css' i ...
- OpenCV学习笔记3
OpenCV学习笔记3 图像平滑(低通滤波) 使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模 ...
- shiro登录验证简单理解
这两天接手了下师兄的项目,要给系统加个日志管理模块,其中需要记录登录功能的日志,那么首先要知道系统的登录是在哪里实现验证的. 该系统把所有登录验证还有权限控制的工作都交给了shiro. 这篇文章就先简 ...
- 杭电1253 超时的bfs...
#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>usin ...