L3-1 二叉搜索树的结构 (30 分)
讲解的很不错的链接:https://blog.csdn.net/chudongfang2015/article/details/79446477#commentBox
题目链接:https://pintia.cn/problem-sets/1108203702759940096/problems/1108204121661857797
题目大意:
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。(摘自百度百科)
给定一系列互不相等的整数,将它们顺次插入一棵初始为空的二叉搜索树,然后对结果树的结构进行描述。你需要能判断给定的描述是否正确。例如将{ 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,即"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在同一层上"。
题目保证所有给定的整数都在整型范围内。
模板题:
AC代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int num;
node *lt,*rt,*fq;
}*tmp;
node *Insert(node *root,int num)
{
if(root==NULL)
{
root=new node;
root->num=num;
root->fq=NULL;
root->lt=NULL;
root->rt=NULL;
return root;
}
else
{
if(num<root->num)
{
root->lt=Insert(root->lt,num);
if(root->lt)
root->lt->fq=root;
}
else
{
root->rt=Insert(root->rt,num);
if(root->rt)
root->rt->fq=root;
}
}
return root;
}
void Find(node *root,int num)
{
if(root&&!tmp)
{
if(root->num==num)
{
tmp=root;
return ;
}
Find(root->lt,num);
Find(root->rt,num);
}
}
int h(node *root)
{
int h=;
if(root==NULL)
return ;
while(root->fq)
{
h++;
root=root->fq;
if(root==NULL)
break;
}
return h;
}
int main()
{
int n,m,q;
cin>>n;
node *head=NULL;
for(int i=; i<n; i++)
{
int num;
cin>>num;
head=Insert(head,num);
}
head->fq=NULL;
cin>>q;
string str1,str2,str3,str4,str5,str6;
int t1,t2;
while(q--)
{
tmp=NULL;
cin>>t1;
cin>>str1;
if(str1=="is")
{
cin>>str2;
cin>>str3;
if(str3=="root")
{
Find(head,t1);
if(tmp==NULL||tmp->num!=head->num)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
continue;
}
if(str3=="parent")
{
cin>>str4;
cin>>t2;
Find(head,t2);
if(tmp==NULL)
{
cout<<"No"<<endl;
continue;
}
if(tmp->fq&&tmp->fq->num==t1)
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
}
if(str3=="left")
{
cin>>str4>>str5;
cin>>t2;
Find(head,t2);
if(tmp==NULL)
{
cout<<"No"<<endl;
continue;
}
if(tmp->lt&&tmp->lt->num==t1)
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
}
if(str3=="right")
{
cin>>str4>>str5;
cin>>t2;
Find(head,t2);
if(tmp==NULL)
{
cout<<"No"<<endl;
continue;
}
if(tmp->rt&&tmp->rt->num==t1)
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
continue;
}
}
else if(str1=="and")
{
cin>>t2;
cin>>str2>>str3;
if(str3=="siblings")
{
Find(head,t1);
node *tmp1=tmp;
// cout<<tmp1->num<<endl;
if(tmp==NULL)
{
cout<<"No"<<endl;
continue;
}
tmp=NULL;
Find(head,t2);
node *tmp2=tmp;
if(tmp==NULL)
{
cout<<"No"<<endl;
continue;
}
if(tmp1->fq&&tmp2->fq&&tmp1->fq->num==tmp2->fq->num)
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
continue;
}
if(str3=="on")
{
cin>>str4>>str5>>str6;
Find(head,t1);
if(tmp==NULL)
{
cout<<"No"<<endl;
continue;
}
int h1=h(tmp);
// cout<<h1<<endl;
tmp=NULL;
Find(head,t2);
int h2=h(tmp);
if(tmp==NULL)
{
cout<<"No"<<endl;
continue;
}
if(h1&&h2&&h1==h2)
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
}
}
}
return ;
}
L3-1 二叉搜索树的结构 (30 分)的更多相关文章
- 天梯赛练习 L3-016 二叉搜索树的结构 (30分)
题目分析: 用数型结构先建树,一边输入一边建立,根节点的下标为1,所以左孩子为root*2,右孩子为root*2+1,输入的时候可用cin输入字符串也可用scanf不会超时,判断是否在同一层可以判断两 ...
- PTA 7-2 二叉搜索树的结构(30 分)
7-2 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大 ...
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根 ...
- 【开200数组解决二叉搜索树的建立、遍历】PAT-L3-016. 二叉搜索树的结构——不用链表来搞定二叉搜索树
L3-016. 二叉搜索树的结构 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它 ...
- L3-016 二叉搜索树的结构 (30 分) 二叉树
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...
- L3-016 二叉搜索树的结构 (30 分)
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...
- PAT L3-016 二叉搜索树的结构
https://pintia.cn/problem-sets/994805046380707840/problems/994805047903240192 二叉搜索树或者是一棵空树,或者是具有下列性质 ...
- L3-016. 二叉搜索树的结构
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...
随机推荐
- python操作excel文件一(xlrd读取文件)
一般做接口测试,会把参数和一些数据放入excel表中,这样就不会重新编译代码,提高效率.一般如何操作呢?接下来跟着步骤一起学习吧 执行步骤: 1.首先要安装 xlrd这个模块,用 pip instal ...
- 关于用户输入恶意js
有些黑客经常闲得蛋疼的那别人的网站测试,利用一些输入的漏洞提交js代码,搞恶作剧. 对于freemarker视图的web应用,可以参考以下方法: http://yshjava.iteye.com/bl ...
- Codeforces Round #525 (Div. 2) D. Ehab and another another xor problem(待完成)
参考资料: [1]:https://blog.csdn.net/weixin_43790474/article/details/84815383 [2]:http://www.cnblogs.com/ ...
- linux driver ------ platform模型,驱动开发分析
一.platform总线.设备与驱动 在Linux 2.6 的设备驱动模型中,关心总线.设备和驱动3个实体,总线将设备和驱动绑定.在系统每注册一个设备的时候,会寻找与之匹配的驱动:相反的,在系统每注册 ...
- ES DSL 基础查询语法学习笔记
1.查询数量 1 2 3 4 5 6 7 curl -XGET 'http://192.168.6.97:9200/_count?pretty' -d ' { "query" ...
- SQL Server 表值函数
表值函数还是很有意思的,我现在想实现一个功能.就是我查询出来的内容,我要对结果进行再次查询,也要输入参数,我想了想 1.存储过程 不能对执行后的结果进行再次查询,需要创建临时表,太麻烦 2.视图 ...
- MySQL数据类型1
1.float.double.decimal类型用法详解 三者的区别介绍 float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型, ...
- HDU - 5119 Happy Matt Friends(dp)
题目链接 题意:n个数,你可以从中选一些数,也可以不选,选出来的元素的异或和大于m时,则称满足情况.问满足情况的方案数为多少. 分析:本来以为是用什么特殊的数据结构来操作,没想到是dp,还好队友很强. ...
- HDU 1064(求平均数 **)
题意是求 12 个浮点数的平均数,这题不用读题,看到运行时间为 200 ms 再看下样例就能猜出题目的要求了,代码如下: #include <bits/stdc++.h> using na ...
- Python绘制wav文件音频图(静态)[matplotlib/wave]
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 绘制波形图 plottingWaveform.py "&qu ...