【二叉搜索树】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 思路 因为是 完全二叉搜索树 可以用 数据 建树的方式 然后 遍历一遍这个 数字 就是 层序遍历 遍历的 ...
随机推荐
- qmake持续学习
1 qmake技巧: https://blog.csdn.net/chenjianqi0502/article/details/79092433
- composer 无法配置命令行写入配置文件问题
composer config repo.packagist composer https://packagist.phpcomposer.com 这条命令无法修改composer.json 添加中国 ...
- (4)Spring Boot Web开发---静态资源
文章目录 对静态资源的映射规则 模板引擎 Thymeleaf 使用 & 语法 使用之前将的快速创建项目的方法,勾选我们需要的场景,这里我需要 web --> web.sql --> ...
- Word 固定行间距公式图片显示不全、Word Eculid 字体导致行间距过大、Word 行间距过大
1. 前言 1.有些文章行间距要求是固定值,比如,固定值15磅,但是这样会导致有些公式.图片显示不全.例如下图: 2.Euclid这个字体很容易导致行间距超大. 2. 解决方案 1.把固定值15磅改为 ...
- STL源码剖析——iterators与trait编程#1 尝试设计一个迭代器
STL的中心思想在于:将数据容器与算法分开,独立设计,再用一帖粘着剂将它们撮合在一起.而扮演粘着剂这个角色的就是迭代器.容器和算法泛型化,从技术角度来看并不困难,C++的模板类和模板函数可分别达成目标 ...
- Linux基本命令讲解
前言 不多BB,直接上图 Linux命令行的组成结构 [root@oldwang ~]# [root@oldwang ~]# [root@oldwang ~]# [root@oldwang ~]# [ ...
- Ubuntu 18.04安装arm-linux-gcc交叉编译器
Ubuntu 18.04安装arm-linux-gcc交叉编译器
- 机器学习之逻辑回归(Logistic)笔记
在说逻辑回归之前,可以先说一说逻辑回归与线性回归的区别: 逻辑回归与线性回归在学习规则形式上是完全一致的,它们的区别在于hθ(x(i))为什么样的函数 当hθ(x(i))=θTx(i)时,表示的是线性 ...
- 『Python基础练习题』day03
# 1. 有变量name = " aleX leNb " 完成如下操作: # 移除 name 变量对应的值两边的空格,并输出处理结果 # 判断 name 变量是否以 "a ...
- 静态成员函数和(CPP与C结构体的区别)
#include <iostream> using namespace std.; //这种写法只是CPP中的struct的用法,但是在C中还是不支持的. //C中的结构体不支持写方法的. ...