洛谷:P1087 FBI树 P1030 求先序排列 P1305 新二叉树

至于为啥把这三个题放到一起,大概是因为洛谷的试炼场吧,三道树的水题,首先要理解
先序中序后序遍历方法。
fbi树由于数量小,在递归每个区间时,暴力跑一遍区间里的数,看看是否有0和1。至于递归的方法,二分递归就行。
新二叉树就是现根据题意建树,然后求先序遍历时看一下子节点不是‘*’不是才继续向下走
求先序遍历就是用地贵的方式实现,从后序遍历我们可以找出根节点,从中序遍历我们可以找到左右子树。
/*FBI树*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 56281
using namespace std;
int n;
char nam[maxn];
int qq[maxn];
void build(int l,int r)
{
int mid=(l+r)/;
if(l!=r)
{
build(l,mid);
build(mid+,r);
}
int n0=,n1=;
for(int i=l;i<=r;i++)
{
if(qq[i]==)n1++;
if(qq[i]==)n0++;
if(n1&&n0)
{
printf("F");
return;
}
}
printf(n1==?"B":"I");
}
int main()
{
scanf("%d",&n);
scanf("%s",nam);
int len=strlen(nam);
for(int i=;i<=len;i++)
{
qq[i]=nam[i-]-'';
}
build(,len);
return ;
}
/*新二叉树*/
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct root
{
char father;
char rc;
char lc;
root()
{
father='?';
lc='?';
rc='?';
}
}tree[];
void dfs(char x)
{
printf("%c",x);
if(tree[x].lc!='*')dfs(tree[x].lc);
if(tree[x].rc!='*')dfs(tree[x].rc);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
char a,b,c;
cin>>a>>b>>c;
tree[a].lc=b;
tree[a].rc=c;
tree[b].father=a;
tree[c].father=a;
}
for(int i=;i<=;i++)
{
if(tree[i].father=='?'&&tree[i].lc!='?'&&tree[i].rc!='?')
{
dfs(i);
break;
}
}
return ;
}
/*求先序遍历*/
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string a,b;
void qla(int ln,int rn,int l,int r)
{
int place=a.find(b[r]);
cout<<b[r];
if(place>ln)qla(ln,place-,l,place-ln+l-);//两棵子树
if(place<rn)qla(place+,rn,place-ln+l,r-);
}
int main()
{
cin>>a>>b;
int len=a.size();
qla(,len-,,len-);
return ;
}
/*
BADC
BDCA
*/
洛谷:P1087 FBI树 P1030 求先序排列 P1305 新二叉树的更多相关文章
- P1030 求先序排列 P1305 新二叉树
题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度\le 8≤8). 输入输出格式 输入格式: 22行,均为大写字母组成的字符串,表示一棵二叉树的中序与 ...
- 洛谷P1087 FBI树
P1087 FBI树题解: 看到这个题,我想到了线段树!(毕竟刚搞完st表...) 当然,题解中有位大佬也用的线段树,但是当时看的时候我看见了9个if,当场去世. 那么这是一个不用暴力的线段树,且简单 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- P1030 求先序排列 /// 二叉树的遍历
题目大意: 给一棵树的中序排列 后序排列,求这棵树的先序排列 https://www.luogu.org/problemnew/show/P1030 二叉树的四种遍历解说 几种遍历的递归实现 后序排列 ...
- 洛谷 P1030 求先序排列 Label:None
题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序 ...
- 二叉树的遍历 &【NOIP2001普及组】& 洛谷 P1030 求先序排列
题目链接 https://www.luogu.org/problemnew/show/P1030 模板题 先讲一下二叉树的遍历 二叉树的遍历 分类 性质 求法 分为三类: 先序遍历(PreOrder) ...
- 洛谷P1030求先序排列
题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8. 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列. 输 ...
- 洛谷 P1030 求先序排列
题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序 ...
- 洛谷——P1030 求先序排列
https://www.luogu.org/problem/show?pid=1030#sub 题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度< ...
随机推荐
- ios开发过程中描述文件(provisioning profile)过期导致ios无法正常安装的处理办法
1.登录开发者中心,重新编辑描述文件,获得最新的描述文件.(如果对应的P12文件也过期,需要同时下载最新的p12文件).----该步骤需要有权限的人才能操作. 2.下载最新的描述文件和p12文件(如果 ...
- SVN 将主干的代码合并到分支上
来源:http://blog.csdn.net/u012701023/article/details/50978154 问题:开发有了项目主干,再次基础上起了一个分支,开发新的功能:因为业务需要,在上 ...
- 【机器学习算法】Boostrapping算法
参考 1.AdaBoost从原理到实现: 完
- cglib 简单 代理示例-1
引用包cglib-xxx.jar非Maven项目还需要手动引用包asm-xxx.jar业务类(不需要定义接口)cglib代理类(实现接口MethodInterceptor) 异常信息(项目只引用了cg ...
- jquery中not的用法[.not(selector)]
描述: 从匹配的元素集合中移除指定的元素. 如果提供的jQuery对象代表了一组DOM元素,.not()方法构建一个新的匹配元素的jQuery对象,用于存放筛选后的元素.所提供的选择器是对每个元素进行 ...
- 【HAOI2010】订货
可以DP也可以是费用流,然而被我用非常简单的DP破了[开心] 原题: 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定 ...
- day33 python学习 多线程
线程的概念 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 三 线程与进程的区别 1 1.线程的创建开销小(无需申请内存空间或者资源),创建线程的 ...
- day11 python学习 函数的建立,返回值,参数
函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,如:发送邮件.计算出 [11,22,38,888,2]中的最大数等 ...
- apache隐藏web服务器的版本信息
curl -I yourdomain.com 能看到什么? Server: Apache xxx PHP xxx XXX xxx 我们不妨看看 curl -I www.google.com 结果如何: ...
- Linux下编译安装nginx并且监控
一.安装Nginx 使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好. 安装make: yum -y install gcc automake ...