#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. 二叉搜索树的结构的更多相关文章

  1. 天梯赛练习 L3-016 二叉搜索树的结构 (30分)

    题目分析: 用数型结构先建树,一边输入一边建立,根节点的下标为1,所以左孩子为root*2,右孩子为root*2+1,输入的时候可用cin输入字符串也可用scanf不会超时,判断是否在同一层可以判断两 ...

  2. PAT 天梯赛 是否完全二叉搜索树   (30分)(二叉搜索树 数组)

    将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...

  3. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  4. 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  5. 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  6. 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  7. 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  8. 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  9. 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  10. 团体程序设计天梯赛(CCCC) L3009 长城 方法证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

随机推荐

  1. JAVA分代收集机制详解

    Java堆中是JVM管理的最大一块内存空间.主要存放对象实例. 在JAVA中堆被分为两块区域:新生代(young).老年代(old). 堆大小=新生代+老年代:(新生代占堆空间的1/3.老年代占堆空间 ...

  2. TFS任务预览

    不太熟悉TFS任务项的建立. 初步建立及按老师要求分配到个人的任务设置与时间安排如下: (长时间任务可由多人合作完成,具体根据情况迅速调整任务分配) 加上每人需要进行阅读前一小组的代码需要时间2*8= ...

  3. Daily Scrum (2015/11/2)

    今日我们完成了博客作业的发布,并且也完成了服务器的配置. 成员 今日工作 时间 明日工作 符美潇 两篇文档的修善和数据库的搭建. 2h 完成数据库搭建,并能爬取数据提供给第二小组使用 潘礼鹏 编写两篇 ...

  4. 20162314 Experiment 1: Linear structure - experiment report.

    Experiment report of Besti course:<Program Design & Data Structures> Class: 1623 Student N ...

  5. 《JavaScript》字符转义

    escape/unescape encodeURIComponent/decodeURIComponent encodeURI/decodeURI 转义函数会对一些 特殊字符进行转义编码 英文.数字. ...

  6. 团队项目--NABCD模型

    蹭课神器 N(need需求) 每个人的兴趣都不一样,或许你很喜欢自己的专业,并且想再进一步学习专业知识:或许你不是太喜欢自己的专业,想上一些自己感兴趣的课程:但是,当你想上你所钟 意的课时,却发现自己 ...

  7. 图论 Kruskal算法 并查集

    #include<iostream> #include<cstring> #include<string> #include<cstdio> #incl ...

  8. Software Defined Networking(Week 1)

    前言 课程名称:软件定义网络 课程地址 Coursera上新的一期还没开课,所以是YouTube. Instructor:Nick Feamster Get Started 对于本次课程,主要的新内容 ...

  9. linux的桌面介绍

    一:linux桌面环境 1. X Windows桌面环境 X Windows软件是图形显示的核心部分,是直接和PC上的显卡及显示器打交道的底层程序,它控制着linux程序如何在电脑上显示出漂亮的窗口和 ...

  10. PAT 1068 万绿丛中一点红

    https://pintia.cn/problem-sets/994805260223102976/problems/994805265579229184 对于计算机而言,颜色不过是像素点对应的一个 ...