天梯赛练习 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 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大 ...
随机推荐
- 【AtCoder AGC023F】01 on Tree(贪心)
Description 给定一颗 \(n\) 个结点的树,每个点有一个点权 \(v\).点权只可能为 \(0\) 或 \(1\). 现有一个空数列,每次可以向数列尾部添加一个点 \(i\) 的点权 \ ...
- 要你命3000会员版v20.03_全球抖音模式
要你命3000是搭配抖音和极其多软件的神器,支持国际版.国内版,可以去除全部限制,无需爬墙,无需拔卡,35个国家/自由切换,真心强大,请务必低调,谢谢合作. 下载地址:https://sansuinb ...
- 九、TestNG超时测试
"超时"表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败. 使用属性 timeOut = 参数(1s*1000) package com.lc ...
- 热部署Devtools
在子工程添加devtools的依赖 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- centos7安装zabbix server5.0
安装zabbix源 1.rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarc ...
- 双向数据绑定 v-model
双向数据绑定 就是既可以从页面传到数据也可以从数据到页面 初始运行结果为: 在输入框 更改数据 相应的输入框上的也会相对改变 然后再试试利用控制台更改数据 可以看到数据也被改变了 而且输入框中的内容也 ...
- CDH6.3.0下Apache Atlas2.1.0安装与配置
CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...
- 5分钟看懂系列:Python 线程池原理及实现
概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...
- 解决Vue-router 报NavigationDuplicated的三种方法
控制台会报[NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicate ...
- Redis 设计与实现 5:压缩列表
压缩列表是 ZSET.HASH和 LIST 类型的其中一种编码的底层实现,是由一系列特殊编码的连续内存块组成的顺序型数据结构,其目的是节省内存. ziplist 的结构 外层结构 下图展示了压缩列表的 ...