二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。(摘自百度百科)

给定一系列互不相等的整数,将它们顺次插入一棵初始为空的二叉搜索树,然后对结果树的结构进行描述。你需要能判断给定的描述是否正确。例如将{ 2 4 1 3 0 }插入后,得到一棵二叉搜索树,则陈述句如“2是树的根”、“1和4是兄弟结点”、“3和0在同一层上”(指自顶向下的深度相同)、“2是4的双亲结点”、“3是4的左孩子”都是正确的;而“4是2的左孩子”、“1和3是兄弟结点”都是不正确的。

输入格式:

输入在第一行给出一个正整数N(≤100),随后一行给出N个互不相同的整数,数字间以空格分隔,要求将之顺次插入一棵初始为空的二叉搜索树。之后给出一个正整数M(≤100),随后M行,每行给出一句待判断的陈述句。陈述句有以下6种:

  • A is the root,即”A是树的根”;
  • A and B are siblings,即”AB是兄弟结点”;
  • A is the parent of B,即”AB的双亲结点”;
  • A is the left child of B,即”AB的左孩子”;
  • A is the right child of B,即”AB的右孩子”;
  • A and B are on the same level,即”AB在同一层上”。

题目保证所有给定的整数都在整型范围内。

输出格式:

对每句陈述,如果正确则输出Yes,否则输出No,每句占一行。

输入样例:

5
2 4 1 3 0
8
2 is the root
1 and 4 are siblings
3 and 0 are on the same level
2 is the parent of 4
3 is the left child of 4
1 is the right child of 2
4 and 0 are on the same level
100 is the right child of 3

输出样例:

Yes
Yes
Yes
Yes
Yes
No
No
No

分析:简单的二叉搜索树内结点关系问题~Tree中存储每个节点的信息,cnt保存每个节点的序列号,root为树的根,f的值表示问讯关系是否成立,Find查询节点数值对应的序列号。insert为插入新节点进入二叉搜索树的函数,按照规则判断左右孩子是否为空(用-1表示),是的话就当成新节点的位置插入~

#include <bits/stdc++.h>
using namespace std;
struct node {int num, lchild, rchild, parent, level;node() {lchild = rchild = parent = -1;}
}Tree[128];
int n, m, a, b, in, cnt, root = 1, f;
map<int, int> Find;
string t;
void insert(int x) {int now = root;while(Tree[now].num != x) {if (x < Tree[now].num) {if (Tree[now].lchild == -1) {Tree[cnt].num = x;Tree[cnt].level = Tree[now].level + 1;Tree[cnt].parent = now;Tree[now].lchild = cnt;}now = Tree[now].lchild;} else {if (Tree[now].rchild == -1) {Tree[cnt].num = x;Tree[cnt].level = Tree[now].level + 1;Tree[cnt].parent = now;Tree[now].rchild = cnt;}now = Tree[now].rchild;}}
}
int main() {cin >> n >> in;Tree[++cnt].num = in;Find[in] = cnt;for (int i = 1; i < n; i++) {cin >> in;Find[in] = ++cnt;insert(in);}cin >> m;while (m--) {f = 0;cin >> a >> t;if (t == "is") {cin >> t >> t;if (t == "root") {if (Find[a] == root) f = 1;} else if (t == "parent") {cin >> t >> b;if (Tree[Find[b]].parent == Find[a]) f = 1;} else if (t == "left") {cin >> t >> t >> b;if (Tree[Find[b]].lchild == Find[a]) f = 1;} else {cin >> t >> t >> b;if (Tree[Find[b]].rchild == Find[a]) f = 1;}} else {cin >> b >> t >> t;if (t == "siblings") {if (Find[a] && Find[b] && Tree[Find[a]].parent == Tree[Find[b]].parent) f = 1;} else {cin >> t >> t >> t;if (Find[a] && Find[b] && Tree[Find[a]].level == Tree[Find[b]].level) f = 1;}}cout << (f ? "Yes" : "No") << '\n';}return 0;
}

L3-016 二叉搜索树的结构 (30 分)-PAT 团体程序设计天梯赛 GPLT相关推荐

  1. L3-012 水果忍者 (30 分)-PAT 团体程序设计天梯赛 GPLT

    2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以 ...

  2. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT

    本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...

  3. L3-009 长城 (30 分)-PAT 团体程序设计天梯赛 GPLT

    正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长城上,建造了许多烽火台.每个烽火台都监视着一个特定的地区范围.一旦某个地区有外敌入侵,值守在对应烽火台上的士兵就会将敌情通报给周围的烽火台,并迅 ...

  4. L3-023 计算图 (30 分)--PAT 团体程序设计天梯赛 GPLT

    "计算图"(computational graph)是现代深度学习系统的基础执行引擎,提供了一种表示任意数学表达式的方法,例如用有向无环图表示的神经网络. 图中的节点表示基本操作或 ...

  5. L3-019 代码排版 (30 分)-PAT 团体程序设计天梯赛 GPLT

    某编程大赛中设计有一个挑战环节,选手可以查看其他选手的代码,发现错误后,提交一组测试数据将对手挑落马下.为了减小被挑战的几率,有些选手会故意将代码写得很难看懂,比如把所有回车去掉,提交所有内容都在一行 ...

  6. L3-021 神坛 (30 分)-PAT 团体程序设计天梯赛 GPLT

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

  7. L3-020 至多删三个字符 (30 分)-PAT 团体程序设计天梯赛 GPLT

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...

  8. L3-017 森森快递 (30 分)-PAT 团体程序设计天梯赛 GPLT

    森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由于道路限制,第i号城市(i=0,⋯,N−2)与第(i ...

  9. L3-006 迎风一刀斩 (30 分)-PAT 团体程序设计天梯赛 GPLT

    迎着一面矩形的大旗一刀斩下,如果你的刀够快的话,这笔直一刀可以切出两块多边形的残片.反过来说,如果有人拿着两块残片来吹牛,说这是自己迎风一刀斩落的,你能检查一下这是不是真的吗? 注意摆在你面前的两个多 ...

最新文章

  1. defensive-bash-programming
  2. 抽象工厂+反射+依赖注入 实现对数据访问层和业务逻辑层的优化
  3. 何时使用构造函数,构造函数使用new关键字
  4. 用C#开发.NET CF 蓝牙通信模块
  5. android volley 上传图片 和参数,android Volley 上传文件上传图片
  6. 登录获取token,token参数关联至所有请求的请求体内
  7. Vue中导出Excel
  8. 三层交换机原理及实验操作
  9. formula 返回list_Formula element (List)
  10. ubuntu 访问外网
  11. 康考迪亚大学应用计算机科学,康考迪亚大学专业设置
  12. 转载:java面试题(一)
  13. 小度计算机笔记,“一场无速记发布会”,小度真无线智能耳机革新语音笔记功能...
  14. 微信小程序之微票前后端简易版+五天实训总结
  15. LAS文件中的时间戳gps_time到底是什么时间?计算原理及时间转换
  16. 自制系统(用VMware制作)
  17. stm32f103——中断——UART中断服务函数
  18. 【教学类-18-02】20221124《蒙德里安“红黄蓝黑格子画”-A4竖版》(大班)
  19. LaTeX公式语法大全
  20. java入门Hello world程序的编写

热门文章

  1. 在html中base的作用,html中base标签的作用是什么
  2. 基础总结篇之二:Activity的四种launchMode
  3. Git学习系列(五)分支管理详解
  4. JQuery与springmvc实现单个文件上传操作
  5. Y15BeTa蜂鸣器-演奏版-简化版
  6. 关于【AC自动姬】的学习
  7. 【js】event(事件对象)详解
  8. SQL2008,SQL2005存储过程解密
  9. shell 脚本基础
  10. django项目基础