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

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

输入格式:

输入在第一行给出一个正整数N(≤),随后一行给出N个互不相同的整数,数字间以空格分隔,要求将之顺次插入一棵初始为空的二叉搜索树。之后给出一个正整数M(≤),随后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
题解:主要就是给出来的点可能不在树上,用map标记一下即可,其他的直接模拟即可~~
#include<bits/stdc++.h>
using namespace std;
string str1,str2,str3,str4,str5,str6;
int n,x,y,q;
map<int,int>mp;
struct node
{
node *l,*r;
int data;
};
node *Insert(node *root,int x)
{
if(root==NULL)
{
root=new node;
root->data=x;
root->l=root->r=NULL;
return root;
}
else
{
if(x<root->data)
root->l=Insert(root->l,x);
else if(x>root->data)
root->r=Insert(root->r,x);
}
return root;
} int Find_F(node *root,int x,int y)//x是否是y的父亲
{
if(root)
{
if(root->data==x)
{
if(root->l&&root->l->data==y)
{
return ;
}
if(root->r&&root->r->data==y)
{
return ;
}
}
if(x<root->data)//为了保证结果的正确性,要正确利用二叉搜索的性质进行return,以下同理
return Find_F(root->l,x,y);
if(x>root->data)
return Find_F(root->r,x,y);
}
return ;
}
int Find_L(node *root,int x,int y)//x是否是y的左孩子
{
if(root)
{
if(root->data==y)
{
if(root->l&&root->l->data==x)
{
return ;
}
}
if(y<root->data)
return Find_L(root->l,x,y);
if(y>root->data)
return Find_L(root->r,x,y);
}
return ;
}
int Find_R(node *root,int x,int y)//x是否是y的右孩子
{
if(root)
{
if(root->data==y)
{
if(root->r&&root->r->data==x)
{
return ;
}
}
if(y<root->data)
return Find_R(root->l,x,y);
if(y>root->data)
return Find_R(root->r,x,y);
}
return ;
}
int Find_C(node *root,int x,int y)//x和y是否为兄弟节点
{
if(root)
{
if(root->l&&root->r)
{
if(root->l->data==x&&root->r->data==y)
{
return ;
}
if(root->r->data==x&&root->l->data==y)
{
return ;
}
}
return max(Find_C(root->l,x,y),Find_C(root->r,x,y));//不管左右,只要找到即可
}
return ;
}
int Find_Level(node *root,int x,int step)//x的深度或高度
{
if(root)
{
if(root->data==x)
return step;
if(x<root->data)
return Find_Level(root->l,x,step+);
if(x>root->data)
return Find_Level(root->r,x,step+);
}
return ;
} int main()
{
cin>>n;
node *root=NULL;
for(int i=; i<=n; i++)
{
int r;
cin>>r;
mp[r]++;//将其标记,作为判断条件
root=Insert(root,r);
}
cin>>q;
while(q--)
{
cin>>x;
cin>>str1;
if(str1=="is")
{
cin>>str2>>str3;
if(str3=="root")
{
if(root->data==x)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else if(str3=="parent")
{
cin>>str4>>y;
int r=Find_F(root,x,y);//x是否是y的father
if(r&&mp[x]&&mp[y])
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else if(str3=="left")
{
cin>>str4>>str5>>y;
int r=Find_L(root,x,y);//x是否是y的左孩子
if(r&&mp[x]&&mp[y])
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else if(str3=="right")
{
cin>>str4>>str5>>y;
int r=Find_R(root,x,y);//x是否是y的右孩子
if(r&&mp[x]&&mp[y])
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
else
{
cin>>y>>str2>>str3;//是否为兄弟节点
if(str3=="siblings")
{
int r=Find_C(root,x,y);
if(r&&mp[x]&&mp[y])
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else
{
cin>>str4>>str5>>str6;//最后一种情况,看是否在同一层上
int Level_x=Find_Level(root,x,);
int Level_y=Find_Level(root,y,);
if((Level_x==Level_y)&&Level_x&&mp[x]&&mp[y])
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
}
return ;
}

L3-016 二叉搜索树的结构 (30 分)的更多相关文章

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

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

  2. PTA 7-2 二叉搜索树的结构(30 分)

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

  3. 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历

    二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历   二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...

  4. 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历

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

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

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

  6. L3-1 二叉搜索树的结构 (30 分)

    讲解的很不错的链接:https://blog.csdn.net/chudongfang2015/article/details/79446477#commentBox 题目链接:https://pin ...

  7. L3-016 二叉搜索树的结构 (30 分) 二叉树

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

  8. PAT L3-016 二叉搜索树的结构

    https://pintia.cn/problem-sets/994805046380707840/problems/994805047903240192 二叉搜索树或者是一棵空树,或者是具有下列性质 ...

  9. L3-016. 二叉搜索树的结构

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

随机推荐

  1. EVANYOU尤大个人网站主页CANVAS三角彩带效果分析学习

    尤雨溪网站三角彩带效果 效果: 源码 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  2. 基于Docker本地运行Kubernetes

    基于Docker本地运行Kubernetes 概览 下面的指引将高速你如何通过Docker创建一个单机.单节点的Kubernetes集群. 下图是最终的结果: 先决条件 \1. 你必须拥有一台安装有D ...

  3. JS-语句四

    For 循环: for 循环是创建循环时常会用到的工具. 下面是 for 循环的语法: ; 语句 ; 语句 ) { 被执行的代码 } 其中语句1是初始值:语句2是.条件判断:语句3是状态改变:被执行的 ...

  4. Causal Corpus 事件因果关系语料统计

    Causal Corpus 事件因果关系语料统计 本文是对因果关系抽取领域数据库标注及开源情况的统计.除了对因果关系的标注,一些类似的语料也包含在内,从而为语料的使用提供灵活性,可以根据不同的目标选取 ...

  5. 学生信息的添加 Java web简单项目初试(修改)

    错误原因: 1.Java web 的Servlet类没有配置好,并且缺少一个 Dao类(Date Access Object通常用于操作数据库的). 2.代码的某些名称错误,导致数据库数据存储错误. ...

  6. CentOS 7.3 安装redis 4.0.2服务

    CentOS 7.3 安装redis 4.0.2服务 1.下载解压 下载地址:/home/xiaoming/ wget http://download.redis.io/releases/redis- ...

  7. .NET微信开发 配置微信公众号基本配置的几种方法

    自己最近搞了公众号,记录一下. 目的就是为了在微信公众号里启用服务器配置. 微信文档 其实微信文档已经写得很清楚了,也很简单.(微信的目的就是它发送一个get请求,希望我们能接受一下,然后给微信回个数 ...

  8. 干货|CVE-2019-11043: PHP-FPM在Nginx特定配置下任意代码执行漏洞分析

    近期,国外安全研究员Andrew Danau,在参加夺旗赛(CTF: Capture the Flag)期间,偶然发现php-fpm组件处理特定请求时存在缺陷:在特定Nginx配置下,特定构造的请求会 ...

  9. Git 报错:fatal: refusing to merge unrelated histories

    背景:[接上篇git push 出错的随笔]当 pull 远端仓库到本地的时候,出现以下错误: 错误情况: 出错原因:主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库,假如我之前是直接以 cl ...

  10. Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.postgresql.util.PSQLException: 栏位索引超过许可范围:2,栏位数:1

    执行mybaits sql <delete id="delete4BatchesByLineCi" parameterType="java.util.List&qu ...