~递归递归(FBI树--蓝桥)
1220: FBI树 [递归]
时间限制: 1 Sec 内存限制: 128 MB
提交: 5 解决: 4 状态
题目描述
我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
1)T的根结点为R,其类型与串S的类型相同;
2)若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。
输入
第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2N的“01”串。
对于40%的数据,N <= 2;
对于全部的数据,N <= 10。
输出
包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。
样例输入
3
10001011
样例输出
IBFBBBFIBFIIIFF
因为为了练习二叉树才写的这道题,所以第一次是用建立二叉树的方法A的代码略长,后来发现可以递归自己写了个递归,,,最后看到了别人家的递归!!!下面:
巧妙地利用了返回值判断零一串!
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=(1<<10);
char s[maxn+20];
int write(int l,int r)
{
if(l==r)
{
printf("%c",(s[l]=='0')?'B':'I'); //是零表明是B串,输出B并返回0,1表明是I串输出I并返回1
return s[l]=='1';
}
int sl,sr,k=(l+r)/2;
sl=write(l,k),sr=write(k+1,r);
if(sl+sr==0){printf("B");return 0;} //如果左右两部分递归后返回值相加为零说明这是个零串,是二说明是‘1’串
if(sl+sr==2){printf("I");return 1;}
printf("F"); return 3; //否则就是01串
} int main()
{
while( scanf("%s%s",s,s)!=EOF)
write(0,strlen(s)-1),printf("\n");
return 0;
} 自己写的递归,因为加了判断01的部分略长
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[10005];
void dfs(int x,int y)
{
int t1=0,t2=0;
if(x==y) {printf("%c",(s[x]=='1'?'I':'B'));return;}
else{
int m=(x+y)/2;
dfs(x,m);
dfs(m+1,y);
for(int i=x;i<=y;++i) if(s[i]=='0') ++t1;
else if(s[i]=='1') ++t2;
if(t1&&t2) cout<<'F';
else if(t1&&!t2) cout<<'B';
else cout<<'I';
}
}
int main()
{
int n,m,i,j;
while(scanf("%s%s",s,s)!=EOF) dfs(0,strlen(s)-1),printf("\n");
return 0;
}
~递归递归(FBI树--蓝桥)的更多相关文章
- 【递归】Vijos P1114 FBI树(NOIP2004普及组第三题)
题目链接: https://vijos.org/p/1114 题目大意: 把01串一分为二,左半边描述当前节点左子树,右半边描述右子树,子树全为1则为I节点,全为0则为B节点,混合则为F节点,直到当前 ...
- 【递归+树】FBI树
题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为BB串,全"1"串称为I串,既含"0& ...
- 蓝桥杯之FBI树问题
问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- Java实现 蓝桥杯VIP 算法训练 FBI树
问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- C#递归生成HTML树,C#递归生成xml树
C#递归生成HTML树 public StringBuilder str = new StringBuilder(); //定义一个字符串 private void get_navigation_ ...
- 递归遍历JSON树
递归遍历JSON树 前几天有个人问我,json串的层级无限深,但在json串中的key是已知的,在json串中的value,有些事Object,有些是Array,如何把这些层级无限深的key所对应的v ...
- JavaScript通过父节点ID递归生成JSON树
JavaScript通过父节点ID递归生成JSON树: · 实现思路:通过递归实现(第一次递归的时候查询出所有的父节点,然后通过当前父节点id不断地去查询所有子节点,直到递归完毕返回) · 代码示 ...
- Vijos 1114 FBI树
描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...
- noip普及组2004 FBI树
FBI树 描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含" ...
随机推荐
- MockWebServer--环境
MockWebServer是一个可脚本化的用于测试HTTP客户端的Web服务器.主要用于测试你的应用在进行HTTP.HTTPS请求时是否按照预期的行为动作.使用该工具,你可以验证应用的请求是否符合预期 ...
- 在IBM学到的东西,到底对我的程序生涯产生了多大的影响
我和很多人交流过一个有趣的现象,那就是刚毕业到30岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻,但是一旦过了30岁,时间就如白驹过隙,一年又一年飞逝而过. 我自己也是,眼瞅着毕业快15年了,15 ...
- java网络基础知识的简述
TCP/UDP的介绍 TCP协议:面向连接的,字节流无差错地传输协议. UDP协议:一个不可靠的无连接的数据传输协议. 说明:TCP可以想象成电话通讯,双方在通话时必须建立连接,一方没听清,会要求对方 ...
- Linux启动vi编辑器时提示E325: ATTENTION解决方案
Linux启动vi编辑器时提示E325: ATTENTION解决方案 Vi编辑器是Linux的文本编辑器,在Linux系统的运用非常广泛,不少朋友在打开Vi编辑器的时候提示E325: ATTENTIO ...
- mysql免安装版本(用批处理安装和启动)
参考文章: http://www.cnblogs.com/niuniutry/p/3555778.html http://wenku.baidu.com/link?url=WI9Cyl5AMHOlps ...
- 20165310 Java实验四 《Android程序设计》
20165310 实验四 <Android程序设计> 第24章:初识Android 任务一:改写res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号 首 ...
- 三点估算和PERT技术
三点估算是PMP考试中的必考题目,每次约2-4道题目.现在就三点估算和PERT技术做详细讲解,以飨读者. 通过考虑估算中的不确定性和风险,可以提高活动持续时间估算的准确性.这个概念起源于计划评审技术( ...
- ZOJ 2083 Win the Game(SG函数)题解
题意:给一端n块的板,两人玩,每次能涂相邻两块没涂过的板,不能涂的人为输,先手赢输出yes 思路:sg函数打表,练习题 代码: #include<queue> #include<cs ...
- IntelliJ IDEA 设置代码提示或自动补全的快捷键(Alt+/)
点击 文件菜单(File) –> 点击 设置(Settings… Ctrl+Alt+S), –> 打开设置对话框.在左侧的导航框中点击 KeyMap. 接着在右边的树型框中选择 Main ...
- Nexus Repository 搭建及使用
Nexus Repository 是搭建maven的镜像的工具之一,在全球范围内使用挺广的. 一.Nexus 搭建过程 Nexus 镜像的搭建还是相对简单的,将下载的文件解压到相应的目录下,然后进入. ...