团体程序设计天梯赛 L3-016. 二叉搜索树的结构
#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <math.h>
#include <stdbool.h>
#include <algorithm>
using namespace std;
#define maxn 500+100 //离散化+结构体数组存储树(数据可能很大,不可能用tree[x]记录值为x的结点,而用链表存储树,在这一题判断兄弟结点等不太方便)
//输入的数据点也许并不在树上
//兄弟结点不能相同 struct node
{
long left,right,fa,depth;
}tree[maxn]; long n,num[maxn],z[maxn]; bool cmp(long a,long b)
{
return a<b;
} //better:binary search
int findnum(long value)
{
long i;
for (i=;i<=n;i++)
if (value==z[i])
return i;
return n+;
} int add(long pos,long value,long depth)
{
if (value < pos)
{
if (tree[pos].left==)
{
tree[pos].left=value;
tree[value].fa=pos;
tree[value].depth=depth;
}
else
add(tree[pos].left,value,depth+);
}
else
{
if (tree[pos].right==)
{
tree[pos].right=value;
tree[value].fa=pos;
tree[value].depth=depth;
}
else
add(tree[pos].right,value,depth+);
}
} int main()
{
long i,j,x,y,p,q,m,root;
char a[],b[],c[],d[],e[],f[];
scanf("%ld",&n);
for (i=;i<=n;i++)
{
scanf("%ld",&z[i]);
num[i]=z[i];
}
for (i=;i<=n;i++)
{
tree[i].left=;
tree[i].right=;
tree[i].fa=; //不能像并查集一样设置为i
}
sort(z+,z+n+,cmp); //[x,y) root=findnum(num[]);
tree[root].depth=;
for (i=;i<=n;i++)
{
j=findnum(num[i]);
add(root,j,);
} scanf("%ld",&m);
while (m)
{
m--;
scanf("%ld",&x);
p=findnum(x);
scanf("%s",a);
if (strcmp(a,"is")==)
{
scanf("%s%s",b,c);
if (strcmp(c,"root")==)
{
// if (p!=n+1 && tree[p].fa==0)
if (x==num[])
printf("Yes\n");
else
printf("No\n");
}
else if (strcmp(c,"parent")==)
{
scanf("%s",d);
scanf("%ld",&y);
q=findnum(y);
if (q!=n+ && tree[q].fa==p)
printf("Yes\n");
else
printf("No\n");
}
else if (strcmp(c,"left")==)
{
scanf("%s%s",d,e);
scanf("%ld",&y);
q=findnum(y);
if (q!=n+ && tree[q].left==p)
printf("Yes\n");
else
printf("No\n");
}
else
{
scanf("%s%s",d,e);
scanf("%ld",&y);
q=findnum(y);
if (q!=n+ && tree[q].right==p)
printf("Yes\n");
else
printf("No\n");
}
}
//and
else
{
scanf("%ld",&y);
q=findnum(y);
scanf("%s%s",b,c);
if (strcmp(c,"siblings")==)
{
if (p!=n+ && q!=n+ && p!=q && tree[p].fa==tree[q].fa) //两个结点不能相同
printf("Yes\n");
else
printf("No\n");
}
else
{
scanf("%s%s%s",d,e,f);
if (p!=n+ && q!=n+ && tree[p].depth==tree[q].depth)
printf("Yes\n");
else
printf("No\n");
}
}
}
return ;
}
团体程序设计天梯赛 L3-016. 二叉搜索树的结构的更多相关文章
- 天梯赛练习 L3-016 二叉搜索树的结构 (30分)
题目分析: 用数型结构先建树,一边输入一边建立,根节点的下标为1,所以左孩子为root*2,右孩子为root*2+1,输入的时候可用cin输入字符串也可用scanf不会超时,判断是否在同一层可以判断两 ...
- PAT 天梯赛 是否完全二叉搜索树 (30分)(二叉搜索树 数组)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3009 长城 方法证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
随机推荐
- Less 的用法
1. node.js node.js是一个前端的框架 自带一个包管理工具npm node.js 的安装 官网:http://nodejs.cn/ 在命令行检验是否安装成功 切换到项目目录,初始化了一个 ...
- Tomcat安全管理规范
s 前言 随着公司内部使用Tomcat作为web应用服务器的规模越来越大,为保证Tomcat的配置安全,防止信息泄露,恶性攻击以及配置的安全规范,特制定此Tomcat安全配置规范. 定位:仅对tomc ...
- python所遇到的坑
我是在ubuntu中,自带的有python2,python3有安装了anaconda套件,所以python的版本很多,曾经想删除过不用的python. 先执行 sudo apt remove pyth ...
- 从汉诺塔游戏理解python递归函数
汉诺塔游戏规则: 有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方 图 ...
- [linux] LVM磁盘管理(针对xfs和ext4不同文件系统)
简单来说就是:PV:是物理的磁盘分区VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘LV:也就是从VG中划分的逻辑分区如下图所示PV.VG.LV三者 ...
- Task 7 买书最低价格问题
任务: 书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示: 本数 折扣 2 5% 3 ...
- java微信开发之接口连接
个人学习注册订阅号就行,把资料尽可能完善,不然开发时权限不够,然后登陆,点击订阅号然后扫码就可以微信关注.
- Myeclipse2014 用Maven创建第一个web项目(1)---helloworld
一.创建项目 1.Eclipse中用Maven创建项目 2.继续Next 3.选maven-archetype-webapp后,next 4.填写相应的信息,Packaged是默认创建一个包,不写也可 ...
- Beta冲刺(5/7)
队名:天机组 组员1友林 228(组长) 今日完成:修改代码 明天计划:封装代码 剩余任务:优化网络通讯机制 主要困难:暂无 收获及疑问:暂无 组员2方宜 225 今日完成:优化了ui界面 明天计划: ...
- unique STL讲解和模板
unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序. 代码: #include<bits/stdc++.h> using ...