problem

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

给定一系列互不相等的整数,将它们顺次插入一棵初始为空的二叉搜索树,然后对结果树的结构进行描述。你需要能判断给定的描述是否正确。例如将{ 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,即"A和B是兄弟结点";
A is the parent of B,即"A是B的双亲结点";
A is the left child of B,即"A是B的左孩子";
A is the right child of B,即"A是B的右孩子";
A and B are on the same level,即"A和B在同一层上"。
题目保证所有给定的整数都在整型范围内。

输出格式:
对每句陈述,如果正确则输出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

  • 给出n个数,建立二叉搜索树
  • m个询问,判断两个节点之间的关系(双亲,兄弟,孩子)

solution

  • 开个结构把每个点的l,r,fa,h都存下来,记得初始化-1.
  • 用map映射代替数组映射建树,方便查找有没有这个节点。
#include<bits/stdc++.h>
using namespace std;struct node{int l=-1, r=-1, fa=-1, h;};
map<int,node>Tree;
void insert(int u, int h, int v){if(u==-1)return ;int uu = (v<u ? Tree[u].l : Tree[u].r);if(uu!=-1){insert(uu,h+1,v);}else{if(v<u)Tree[u].l = v;else Tree[u].r = v;Tree[v].fa = u;Tree[v].h = h;}
}bool judge(int u, int a, int b, string lk){if(lk=="root")return u==a;;if(Tree.find(a)==Tree.end() || Tree.find(b)==Tree.end())return false;if(lk=="siblings")return Tree[a].fa==Tree[b].fa;if(lk=="parent")return Tree[a].l==b || Tree[a].r==b;if(lk=="left")return Tree[b].l == a;if(lk=="right")return Tree[b].r == a;if(lk=="level")return Tree[a].h==Tree[b].h;
}int main(){int n, rt, t;cin>>n>>rt; //rt是根for(int i = 2; i <= n; i++){cin>>t;insert(rt,1,t);}int m, a=0, b=0;  cin>>m;for(int i = 1; i <= m; i++){string s, lk;  cin>>a>>s;if(s=="and"){cin>>b>>s>>s;if(s=="siblings")lk = s;else cin>>s>>s>>lk;}else{cin>>s>>lk;if(lk=="parent")cin>>s>>b;else if(lk!="root")cin>>s>>s>>b;}if(judge(rt,a,b,lk))cout<<"Yes\n";else cout<<"No\n";}return 0;
}

【CCCC】L3-016 二叉搜索树的结构 (30分),,手动建堆(二叉搜索树节点询问),map写法相关推荐

  1. 7-88 二叉搜索树的结构 (30 分)

    7-88 二叉搜索树的结构 (30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值 ...

  2. PTA - 二叉搜索树的结构 (30 分)——建树,输入处理

    二叉搜索树的结构 (30 分) 文章目录 题意: 思路: 1. 如何建树? 2. 如何解决输入问题? 完整Code: 经验: 题意: 定义:二叉搜索树是一棵空树,或者是具有下列性质的二叉树: 若它的左 ...

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

    二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...

  4. 【开200数组解决二叉搜索树的建立、遍历】PAT-L3-016. 二叉搜索树的结构——不用链表来搞定二叉搜索树...

    L3-016. 二叉搜索树的结构 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它 ...

  5. 【CCCC】L3-025 那就别担心了 (30分),dfs搜索起点到终点的路径条数。

    problem L3-025 那就别担心了 (30分) 下图转自"英式没品笑话百科"的新浪微博 -- 所以无论有没有遇到难题,其实都不用担心. ziqia.jpg 博主将这种逻辑推 ...

  6. 【CCCC】L3-020 至多删三个字符 (30分),序列dp+去重

    problem L3-020 至多删三个字符 (30分) 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写 ...

  7. 面试题--5个数能组成多少中不同的二叉搜索树的结构--卡特兰数

    面试题--5个数能组成多少中不同的二叉搜索树的结构--卡特兰数 题目描述: 1,2,3,4,5 五个数字,能组成多少种不同的二叉搜索树的结构?(D) A. 32 B. 36 C. 40 D. 42 解 ...

  8. 【CCCC】L3-010 是否完全二叉搜索树 (30分),完全二叉树判断+层次遍历(奇怪的方法)

    problem L3-010 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序 ...

  9. 【CCCC】L2-004 这是二叉搜索树吗? (25分),二叉搜索树前序遍历

    problem L2-004 这是二叉搜索树吗? (25分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大 ...

最新文章

  1. MEMS传感器科普文
  2. bootstrap下拉列表与输入框组结合的样式调整
  3. linux知识点记录二
  4. 第2章 一切都是对象
  5. QTP User-Defined Function 学习经验汇总
  6. 迭代器——STL关键所在
  7. android自定义View学习(一)----创建一个视图类
  8. 【转】BOM 和 DOM
  9. L2-007. 家庭房产-PAT团体程序设计天梯赛GPLT
  10. Nginx解决403 forbidden
  11. C# 调用C/C++动态链接库,结构体中的char*类型
  12. poythoncode-实战5--json 文件读取,文本文件,csv文件,存到系统中以大列表方式进行存储
  13. 格雷码转换成二进制c语言程序,基于PLC程序实现格雷码转换成二进制码.pdf
  14. 如何修改RubyOnRails中ActiveRecord默认的表格名和外键字段映射关系?
  15. C++打印九九乘法表
  16. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part5人物关系全貌与问答初入
  17. Oracle试卷02
  18. 插入, 桥 - 面面相连
  19. 问题解决:Invalid version number:Version number may be negative or greater than 255
  20. hdu4745(最长回文子序列)

热门文章

  1. 物理术语的理解(二)
  2. Python Flask Web 第四课 —— 模板引擎Jinja2
  3. mysql in过大_项目中常用的 19 条 MySQL 优化
  4. python怎么读写文件-手机上怎么写pythonPython文件读写详解及设置文件的字符编码...
  5. python考试题目及答案-python面试真实笔试题,带答案(1-10题)
  6. 简明python教程-简明Python教程-中文版.pdf
  7. 想学python买什么书好-学习 Python 用哪本书好?
  8. python下载特别慢-Python3 用 urllib 下载图片非常慢,会是什么原因呢?
  9. python是什么意思-python是什么
  10. python手机版-python做app