【二叉搜索树】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 思路 因为是 完全二叉搜索树 可以用 数据 建树的方式 然后 遍历一遍这个 数字 就是 层序遍历 遍历的 ...
随机推荐
- 02. xadmin的过滤器queryset()
需求: 每个老师都只能看到自己的课程 # models.py from django.contrib.auth.models import AbstractUser class UserProfile ...
- linux编程 新建一个进程的方法
学习到一种,直接调用系统函数,在类的构造函数中直接启动一个线程,例如,某个类是用来监听串口的,可以直接在其构造函数中调用系统函数,开辟一个进程,在该进程对应的函数中不断while(1){....} h ...
- Wine 总结
下诉描述有些问题,我用非root用户安装的软件有些也会安装到root用户的家目录里不知道为什么:[我知道了,貌似用了sudo的安装的都是在root目录里..] 经过测试,最好用root权限安装,否则会 ...
- [转帖]AMD:Zen 2霄龙处理器每美元性能可达英特尔至强5.6倍
AMD:Zen 2霄龙处理器每美元性能可达英特尔至强5.6倍 2019-10-20 6:35:38来源:IT之家作者:孤城责编:孤城评论:32 https://www.ithome.com/0/451 ...
- [C#] - 从 HTML 代码中 转换 / 提取 可读文字(PlainText)的方法
背景 在做网页数据分析的时候,我们关注的部分是内容,可以过滤掉HTML标签.Javascript.CSS等代码. 目标输入 <b>Hello World.</b><br/ ...
- OpenCV学习笔记5
OpenCV学习笔记5 图像变换 傅里叶变换 这里可以先学习一下卷积分,了解清除卷积的过程和实际意义,在看这一章节的内容. 原理: 傅里叶变换经常被用来分析不同滤波器的频率特性.我们可以使用 2D 离 ...
- mdk编译时的内存分析
内存四区(代码区,全局区,栈区,堆区) Code:即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区. RO-data:Read Only data,即只读数据域,它指程序中用到的只读数 ...
- C#操作Windows控制面板
先介绍一下Windows控制面板的一些操作,再介绍如何用C#语言来操作控制面板. 1.如何快速打开控制面板中的项目: 运行输入(大小写不敏感) control system 打开系统信息 contro ...
- 【LeetCode】从排序数组中删除重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...
- 将netcore网站部署到docker容器中
一.背景 最近一直在看docker的教程,基础知识看的差不多了.理论总要运用于实践,所以下面我们就来把最简单的一个netcore网站托管到docker容器中. 环境:1.docker for wind ...