描述

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。

FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
1) T的根结点为R,其类型与串S的类型相同;
2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。

现在给定一个长度为2^N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历2序列。

格式

输入格式

输入的第一行是一个整数N(0<=N<=10),第二行是一个长度为2^N的“01”串。

输出格式

输出包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

样例1

样例输入1[复制]

3
10001011

样例输出1[复制]

IBFBBBFIBFIIIFF

限制

每个测试点1s

来源

NOIP2004普及组第三题

题解:一道经典的递归建树求解问题。

样例讲解:第一行输入一个n,第二行输入2^n个0,1字符。将输入的字符串进行递归建树,得到以下结构

10001011

1000                     1011

10              00            10        11

1        0       0      0       1    0     1    1

得到一颗满二叉树

然后对树进行后序遍历,得到输出结果。

思路:第一行输入的n比较无用。直接以字符串的形式读入第二行,然后求长度即可。然后建立递归函数。并在递归建树的过程中,直接输出答案。

具体代码如下:

#include <cstdio>
#include <cstring>
char a[2500];
void FBI(int i,int j)
{int mid;int I,B;if (i<=j){mid=(i+j)/2;I=0;B=0;if (i!=j){FBI(i,mid);FBI(mid+1,j);}for (int m=i;m<=j;m++)if (a[m]=='0') B++;else I++;if (B>0 && I>0) printf("F");else if (B>0) printf("B");else printf("I");}
}
int main()
{int n;scanf("%d",&n);scanf("%s",a);FBI(0,strlen(a)-1);return 0;
}

VIJOS 1114 FBI树相关推荐

  1. 【vijos】【二叉树】FBI树

    描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...

  2. / Vijos FBI树 递归

    描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...

  3. Luogu P1087 FBI树

    P1087 FBI树 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串, ...

  4. P1087 FBI树

    题目描述 我们可以把由"000"和"111"组成的字符串分为三类:全"000"串称为BBB串,全"111"串称为I串,既 ...

  5. 洛谷 1087——FBI树

    题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...

  6. 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)

    题目要求 P1087题目链接 分析 所谓的"FBI树",其实就是一种二叉树,最后的结果也无非就是二叉树的后序遍历序列. 所以,考察的知识点就是--二叉树基本算法的灵活运用. 本题关 ...

  7. FBI树(信息学奥赛一本通-T1365)

    [题目描述] 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0 ...

  8. Java 算法 FBI树

    目录标题 题目描述 解题思路 代码 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1" ...

  9. FBI树-数据结构(二叉树)

    问题 B: [2004_p4]FBI树-数据结构 时间限制: 1 Sec  内存限制: 125 MB 提交: 57  解决: 46 题目描述 我们可以把由"0"和"1&q ...

最新文章

  1. 面向过程的软件设计方法
  2. 【BZOJ 1927】 [Sdoi2010]星际竞速
  3. 设备控制接口(ioctl 函数)
  4. 八、马科维茨投资组合
  5. php运行汇编,php脚本的执行过程(编译与执行相分离)
  6. java开发微信公众平台备忘
  7. 嵌入式Linux入门9:Linux系统使用
  8. 我看Slashdot
  9. 论文赏析[ACL18]基于Self-Attentive的成分句法分析
  10. linux svn 修改回退,玩转SVN-版本回退
  11. 通过R访问世界银行数据(World Bank Data)分析经济
  12. cdr 表格自动填充文字_cdr中看似简单的小工具,你真的会用吗?
  13. IOS开发之——音乐播放器-播放器页面(05)
  14. 制作一个微商城要多少钱
  15. 设计用什么笔记本好?三大选择要点
  16. python 传奇服务端_夜光带你走进python开发 (三十二)传奇语言
  17. C++primer十万字笔记 第九章 顺序容器
  18. Windows和ubuntu下一些提升效率的工具知识点以及typora和Obsidian配置
  19. 使用Nginx和Lua进行图片webp压缩处理
  20. edge浏览器显示无法访问此页面?(网络正常版)详细解决措施,亲测有用!

热门文章

  1. [Video and Audio Data Processing] 截取部分PCM16LE单声道音频采样数据
  2. matlab里H是什么,matlab 中 hObject和handles区别
  3. php定义常量的关键字,PHP常量
  4. 高通Android手机软件开发培训
  5. Linux——匿名管道、命名管道及进程池概念和实现原理
  6. shell读书笔记8
  7. 当串口助手发送数据给单片机,单片机原封不动转发给串口助手显示
  8. 商务电子邮箱那个安全?怎么使用163邮箱最安全?
  9. 我39岁,年薪300万,刚刚被裁员了...
  10. HACER:human增强子数据库