【二叉搜索树】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 思路 因为是 完全二叉搜索树 可以用 数据 建树的方式 然后 遍历一遍这个 数字 就是 层序遍历 遍历的 ...
随机推荐
- 【NER】对命名实体识别(槽位填充)的一些认识
命名实体识别 1. 问题定义 广义的命名实体识别是指识别出待处理文本中三大类(实体类.时间类和数字类).七小类(人名.机构名.地名.日期.货币和百分比)命名实体.但实际应用中不只是识别上述所说的实体类 ...
- scrapy,Twisted,pywin32安装
安装包链接 百度云下载 https://pan.baidu.com/s/1V191nOtEDInxd_fkyi5siQ&shfl=sharepset Linux pip3 insta ...
- eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作
问题的描述 从别人那拿到了Java maven的工程,导入自己的eclipse中之后编译的时候出现包文件找不到,之后把工程进行maven的update project之后,pom.xml文件出现错误, ...
- mysql 转换NULL数据方法
mysql 转换NULL数据方法<pre>SELECT info1,info2, IFNULL(info3,0) as info3 FROM `info1`;</pre>< ...
- context.xml文件配置
<?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml& ...
- LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
230. 二叉搜索树中第K小的元素 230. Kth Smallest Element in a BST 题目描述 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的 ...
- Python 解LeetCode:394 Decode String
题目描述:按照规定,把字符串解码,具体示例见题目链接 思路:使用两个栈分别存储数字和字母 注意1: 数字是多位的话,要处理后入数字栈 注意2: 出栈时过程中产生的组合后的字符串要继续入字母栈 注意3: ...
- Android广播机制——初体验
写在前面的话 文章为笔者自己理解 . -如有错误,欢迎指正- <第一行代码>读书笔记 写于2017年10月16日17:00:40 (一). 安卓广播的分类 a.标准广播 标准广播发出以后, ...
- C++中数组占用的内存计算
在C++中int类型每个空间是4个字节,long long int 是8个字节,而bool类型是1个字节 所以一般能用bool就别用int,节约空间 数组占用内存的计算 a[1001][1001]的空 ...
- python 之 logger日志 字典配置文件
import os import logging.config #不能只导入logging BASE_DIR=os.path.dirname(os.path.dirname(__file__)) # ...