P1087 FBI树

题目描述

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

FBI树是一种二叉树,它的结点类型也包括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树,并输出它的后序遍历序列。

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

3
10001011
输出样例#1:

IBFBBBFIBFIIIFF

说明

对于40%的数据,N <= 2;

对于全部的数据,N <= 10。

noip2004普及组第3题

 1 #include <cstdio>
 2 #include <cmath>
 3
 4 struct node
 5 {
 6     char c;
 7     node *lc, *rc;    //左孩子右孩子
 8 };
 9 char a[1030];
10
11 // node * 要传引用哦
12 void fbicreat(int lr, int rr, node *&p)
13 {
14     p = new node;
15     p->c = 'F';    //先设置成F 后面再判断
16
17     //如果左右位置在一起,则表示此时的结点为叶
18     if(lr == rr)
19     {
20         if(a[lr] == '0')
21             p->c = 'B';
22         else if(a[lr]=='1')
23             p->c = 'I';
24         p->lc = p->rc = NULL;
25         return;
26     }
27
28     //这里的判断参考了 keyword_ 的做法
29     bool b0, b1;    //标志b0是0是否出现
30     b0 = b1 = 0;    //标志b1是1是否出现
31     for(int i=lr; i<=rr; i++)
32     {
33         if(a[i]=='0') b0 = 1;
34         else if(a[i]=='1') b1 = 1;
35     }
36     if(b0 && !b1)    //相信大家都能看懂
37         p->c = 'B';
38     else if(b1 && !b0)
39         p->c = 'I';
40
41     //二叉树二分咯
42     fbicreat(lr, (lr+rr)/2, p->lc);
43     fbicreat((lr+rr)/2+1, rr, p->rc);
44 }
45
46
47
48 void houxu(node *p)
49 {
50     if(p)    //如果是一棵真树
51     {        //后序遍历: 左 右 根
52         houxu(p->lc);
53         houxu(p->rc);
54         printf("%c", p->c);
55     }
56 }
57
58
59 int main()
60 {
61     int n;
62     scanf("%d\n", &n);    //这里记得把回车给读取了
63     n = pow(2, n);
64     for(int i=0; i<n; i++)
65         scanf("%c", a+i);
66
67     node *p;
68     //从数组0位置到n-1位置建立FBI树
69     fbicreat(0, n-1, p);
70     houxu(p);
71     return 0;
72 }

转载于:https://www.cnblogs.com/yBaka/p/7366569.html

Luogu P1087 FBI树相关推荐

  1. P1087 FBI树

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

  2. 洛谷P1087 FBI树

    文章目录 题目 思路 AC代码 后言 题目 添加链接描述 思路 其实这个树很简单,就是一个满二叉树,我们利用父亲结点是i左结点是2* i右节点是2*i+1来存储.就与data信息是字符串所以我利用了一 ...

  3. 18723 FBI树(存储建树思路)

    其实每个结点的值都可以直接由左右结点的值直接得出,可以减少一些遍历的时间. Description 我们可以把由"0"和"1"组成的字符串分为三类:全" ...

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

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

  5. 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树

    [题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...

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

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

  7. 洛谷 1087——FBI树

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

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

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

  9. Java 算法 FBI树

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

最新文章

  1. Angular19 自定义表单控件
  2. caffe filter type:Xavier
  3. 网站不大但加载很慢怎么优化_博客网站首页加载优化
  4. 已经创建了AWS EC2实例,Linux系统默认没有root用户,那么如何创建root用户并更改为root用户登录呢?
  5. 要闻君说:facebook迎来“全球宕机”惊险时刻;吸引大牛!拼多多成立了技术委员会;胡晓明卸任庚接任,阿里云计算迎来法人变更...
  6. 怎样用 Python 控制图片人物动起来?一文就能 Get!
  7. JWT教程_3 oauth和JWT 整合
  8. 数字逻辑_半加器_全加器_全减器_乘法器
  9. 贴片电容的命名规则和参数解释
  10. hdu 6080-度度熊保护村庄
  11. 绝对值线性化的两种方式
  12. 电子嵌入式硬件软件培训
  13. 3DMAX导出插件编写(续)
  14. 查询oracle中所有的用户,如何查询Oracle中所有用户信息
  15. python爬虫爬取淘宝网页
  16. 2001-2020年全国31省城镇居民人均可支配收入/居民实际收入水平
  17. 记事本改字体的代码java_求java记事本代码(带字体设置功能)?
  18. BHQ-3 amine,1661064-89-6可在430nm至730nm范围内猝灭所有普通荧光团
  19. 太赫兹芯片是什么原理_太赫兹收发芯片、收发方法及其成像探测系统与流程
  20. 清华学霸告诉你:暑假不是用来休息的,是用来反超的!

热门文章

  1. Window10安装pycocotools
  2. Java每日一讲讲什么好_撩课-Java每天10道面试题第1天
  3. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
  4. 心音数据库_小V云端数据库 | 2020.9.14—2020.9.18
  5. php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别
  6. Java引入依赖aar_java – 如何将JAR依赖项包含到AAR库中
  7. php文件内含有隐藏的^m字符,【整理】如何取消Linux下,vi中显示的^M符号
  8. PTA---指针错误汇总(就自己做个笔记)
  9. 为什么双层循环 冒泡排序_冒泡排序的双重循环理解
  10. android运行过程简书,Android系统的启动流程