~递归递归(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串,既含" ...
随机推荐
- Centos文件切割利器_split命令及cat命令合并文件
有个文件要处理,因为很大,所以想把它切成若干份,每份N行,以便并行处理.split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,为提高可读性,生成日志等 命令格式 -b:值为 ...
- 20145105 《Java程序设计》第9周学习总结
20145105 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 一.JDBC入门 (一)JDBC简介 厂商在操作JDBC驱动程序时,依操作方式可将驱动程序分为 ...
- 20145318《网络对抗》MSF基础应用
20145318 <网络对抗> MSF基础应用 实验内容 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067;(2)一 ...
- VC++ 文件和应用程序关联,默认图标不显示问题
- git分支 远程协作
创建文件mkdir ### cd ### git init 初始化 git config global user.name “username” git config global user.emia ...
- Sql Server 创建表添加说明
http://bbs.csdn.net/topics/340184487 在此感谢 提供参考 CREATE TABLE ToPayFee ( Id INT IDENTITY(1,1) PRIMA ...
- Facebook广告API系列 3 Ads Management
Facebook广告API系列 3 Facebook marketing API有三大组成部分: Audience Management Ads Management Ads Insights 本篇介 ...
- [转]VS“当前上下文中不存在名称“ViewBag”解决方法
原文链接:<VS"当前上下文中不存在名称"ViewBag",当前上下文不存在名称"model""-已解决> 自己的项目出现了错误 ...
- C++ Boost在VS2015中的使用
1.下载包 目录结构: 切换到上面的目录,然后运行 bootstrap.bat 执行完毕后会生成两个exe文件 继续执行 bjam.exe 结束后,目录如下 2.设置路径 测试 #include &q ...
- Selenium UI自动化测试 Selenium Automatic Testing
https://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html UI Automatic Testing 1. 什么样的项目适合自 ...