天梯赛练习 L3-016 二叉搜索树的结构 (30分)
题目分析:
用数型结构先建树,一边输入一边建立,根节点的下标为1,所以左孩子为root*2,右孩子为root*2+1,输入的时候可用cin输入字符串也可用scanf不会超时,判断是否在同一层可以判断两个节点位置以2为底的对数向下取整是否相同得知(log(m)/log(2)为以换底公式实现的求以2为底m的对数)
坑点:
查询的整数可能并不出现在建立的树中(第三个测试数据)
本题代码:(菜)
1 #include<iostream>
2 #include<stdio.h>
3 #include<string>
4 #include<string.h>
5 #include<algorithm>
6 #include<map>
7 #include<cmath>
8 using namespace std;
9
10 const int N = 10005;
11 int vis[N];
12 int tree[N];
13 map<int, int> mp;
14 int n, m;
15
16 void create(int root, int value){
17 if(vis[root] == 0){
18 vis[root] = 1;
19 tree[root] = value;
20 mp[value] = root; //记录每个value在那个点
21 return;
22 }else{
23 if(value < tree[root]) create(root*2, value);
24 else create(root*2+1, value);
25 }
26 }
27
28 bool judge(int x){
29 if(mp.find(x) == mp.end()){
30 printf("No\n");
31 return false;
32 }
33 return true;
34 }
35
36 void isgen(int x){
37 if(!judge(x)) return;
38 if(tree[1] == x) printf("Yes\n");
39 else printf("No\n");
40 }
41
42 void iscen(int x, int y){
43 if(!judge(x) || !judge(y)) return;
44 x = mp[x]; y = mp[y];
45 if(int(log(x)/log(2)) == int(log(y)/log(2))) printf("Yes\n");
46 else printf("No\n");
47 }
48
49 void isleft(int x, int y){
50 if(!judge(x) || !judge(y)) return;
51 if(mp[y]*2 == mp[x]) printf("Yes\n");
52 else printf("No\n");
53 }
54
55 void isright(int x, int y){
56 if(!judge(x) || !judge(y)) return;
57 if(mp[y]*2+1 == mp[x]) printf("Yes\n");
58 else printf("No\n");
59 }
60
61 void isborther(int x, int y){
62 if(!judge(x) || !judge(y)) return;
63 if(mp[x]/2 == mp[y]/2) printf("Yes\n");
64 else printf("No\n");
65 }
66
67 void isparent(int x, int y){
68 if(!judge(x) || !judge(y)) return;
69 if(mp[y]/2 == mp[x]) printf("Yes\n");
70 else printf("No\n");
71 }
72
73 int main(){
74 scanf("%d", &n);
75 memset(vis, 0, sizeof(vis));
76 for(int i = 1; i <= n; i++){
77 int x; scanf("%d", &x);
78 create(1, x);
79 }
80 scanf("%d", &m);
81 for(int i = 1; i <= m; i++){
82 int x;
83 cin>>x;
84 string s1; cin>>s1;
85 if(s1 == "and"){
86 int y; cin>>y;
87 cin>>s1; cin>>s1;
88 if(s1 == "on"){ //判断是否是同层
89 getline(cin, s1);
90 iscen(x, y);
91 }else{ //判断是否是兄弟
92 getline(cin, s1);
93 isborther(x, y);
94 }
95 }else{
96 cin>>s1; cin>>s1;
97 if(s1 == "root"){//是否为根
98 isgen(x);
99 }else if(s1 == "parent"){//x是否是y的父亲
100 cin>>s1;
101 int y; cin>>y;
102 isparent(x, y);
103 }else if(s1 == "left"){//x是否是y的左孩子
104 cin>>s1; cin>>s1;
105 int y; cin>>y;
106 isleft(x, y);
107 }else{ //x是否是y的右孩子
108 cin>>s1; cin>>s1;
109 int y; cin>>y;
110 isright(x, y);
111 }
112 }
113 }
114 return 0;
115 }
天梯赛练习 L3-016 二叉搜索树的结构 (30分)的更多相关文章
- PAT 天梯赛 L2-004 这是二叉搜索树吗?
递归判断+建树 题目链接:https://www.patest.cn/contests/gplt/L2-004 题解 二叉搜索树的特点就是其根节点的值是位于左右子树之间的,即大于左子树的所有值,但是小 ...
- PAT天梯赛L2-004 这是二叉搜索树吗【递归】
L2-004. 这是二叉搜索树吗? 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一棵二叉搜索树可被递归地定义为具有下列性质的 ...
- PAT 天梯赛 是否同一棵二叉搜索树 (25分)(二叉搜索树 指针)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- 团体程序设计天梯赛L3-010 是否完全二叉搜索树 2017-03-24 16:12 29人阅读 评论(0) 收藏
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
- pat 团体天梯赛 L3-010. 是否完全二叉搜索树
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
- pat 团体天梯赛 L2-004. 这是二叉搜索树吗?
L2-004. 这是二叉搜索树吗? 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一棵二叉搜索树可被递归地定义为具有下列性质的 ...
- PAT 天梯赛 L3-010. 是否完全二叉搜索树 【Tree】
题目链接 https://www.patest.cn/contests/gplt/L3-010 思路 因为是 完全二叉搜索树 可以用 数据 建树的方式 然后 遍历一遍这个 数字 就是 层序遍历 遍历的 ...
- 【二叉搜索树】PAT-天梯赛- L2-004. 这是二叉搜索树吗?
大致题意: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树 ...
- PTA 7-2 二叉搜索树的结构(30 分)
7-2 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大 ...
随机推荐
- libev的用法
本例是以linux环境c++的用法,ide用的是vs2019 一.libev的安装 我们采用的是apt-get方法(偷懒^_^),你也可以采用源码方式安装 sudo apt-get install l ...
- 从0到1实战移动Web App开发
从0到1实战移动Web App开发 教程介绍 从0到1 实战webapp,通过热门的web前端技术实现移动端app应用,先基础.后实战,在讲解的同时引导思考,会抛出自己独特的观点,一行一行写代码讲 ...
- Jmeter(4)断言
Jmeter添加断言,检查测试中得到的响应数据是否符合预期.以下介绍下响应断言,JSON断言 一.响应断言 1.创建测试计划: 添加线程组->添加取样器->添加察看结果树,运行后可查看接口 ...
- MySQL MHA安装配置
1.环境规划 192.168.12.131 node01 192.168.12.132 node02 192.168.12.133 node03 2.环境准备 一主两从GTID,略. 3.配置关键程序 ...
- AWT06-事件处理
在AWT中,用户的所有操作都要由事件处理来完成.Frame和组件本身没有处理事件的能力. 1.GUI事件处理机制 定义:在某个组件上发生某种操作时,自动触发某段代码. 事件处理涉及4个重要概念: 事件 ...
- linux 配置本地yum源,配置国内yum源,配置epel源
目录 一.配置本地yum源 二.配置国内yum源和epel源 一.配置本地yum源 1.挂载ISO镜像 mount -o loop /mnt/yum-iso/CentOS-7-x86_64-DVD-1 ...
- Zepto入门
Zepto 的介绍 #什么是 Zepto zepto是轻量级的JavaScript库,专门为移动端定制的框架. 与jquery有着类似的API,俗称:会jquery就会用zepto #zepto的特点 ...
- XSS攻击与防止
1.XSS又称CSS, cross sitescript, 跨站脚本攻击,是web程序中常见的漏洞 XSS属于被动式且用于客户端的攻击方式 XSS攻击类似于SQL注入攻击,攻击之前,我们先找到一个存在 ...
- python归并排序
由于某人问我要个归并排序,就凑合写了一个,AA = raw_input().split(' ') A = []; for num in AA: A.append(int(num)) def Merge ...
- python之代码重构
在撸码过程中,总有很多代码需要重构,码一个问候用户的小例子,加深对代码重构的印象. 原始代码: 1 import json 2 3 filename = 'username.json' #定义文件名 ...