Luogu P1087 FBI树
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树的后序遍历序列。
输入输出样例
3 10001011
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树相关推荐
- P1087 FBI树
题目描述 我们可以把由"000"和"111"组成的字符串分为三类:全"000"串称为BBB串,全"111"串称为I串,既 ...
- 洛谷P1087 FBI树
文章目录 题目 思路 AC代码 后言 题目 添加链接描述 思路 其实这个树很简单,就是一个满二叉树,我们利用父亲结点是i左结点是2* i右节点是2*i+1来存储.就与data信息是字符串所以我利用了一 ...
- 18723 FBI树(存储建树思路)
其实每个结点的值都可以直接由左右结点的值直接得出,可以减少一些遍历的时间. Description 我们可以把由"0"和"1"组成的字符串分为三类:全" ...
- 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)
题目要求 P1087题目链接 分析 所谓的"FBI树",其实就是一种二叉树,最后的结果也无非就是二叉树的后序遍历序列. 所以,考察的知识点就是--二叉树基本算法的灵活运用. 本题关 ...
- 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树
[题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...
- 【vijos】【二叉树】FBI树
描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...
- 洛谷 1087——FBI树
题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- FBI树(信息学奥赛一本通-T1365)
[题目描述] 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0 ...
- Java 算法 FBI树
目录标题 题目描述 解题思路 代码 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1" ...
最新文章
- Angular19 自定义表单控件
- caffe filter type:Xavier
- 网站不大但加载很慢怎么优化_博客网站首页加载优化
- 已经创建了AWS EC2实例,Linux系统默认没有root用户,那么如何创建root用户并更改为root用户登录呢?
- 要闻君说:facebook迎来“全球宕机”惊险时刻;吸引大牛!拼多多成立了技术委员会;胡晓明卸任庚接任,阿里云计算迎来法人变更...
- 怎样用 Python 控制图片人物动起来?一文就能 Get!
- JWT教程_3 oauth和JWT 整合
- 数字逻辑_半加器_全加器_全减器_乘法器
- 贴片电容的命名规则和参数解释
- hdu 6080-度度熊保护村庄
- 绝对值线性化的两种方式
- 电子嵌入式硬件软件培训
- 3DMAX导出插件编写(续)
- 查询oracle中所有的用户,如何查询Oracle中所有用户信息
- python爬虫爬取淘宝网页
- 2001-2020年全国31省城镇居民人均可支配收入/居民实际收入水平
- 记事本改字体的代码java_求java记事本代码(带字体设置功能)?
- BHQ-3 amine,1661064-89-6可在430nm至730nm范围内猝灭所有普通荧光团
- 太赫兹芯片是什么原理_太赫兹收发芯片、收发方法及其成像探测系统与流程
- 清华学霸告诉你:暑假不是用来休息的,是用来反超的!
热门文章
- Window10安装pycocotools
- Java每日一讲讲什么好_撩课-Java每天10道面试题第1天
- python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
- 心音数据库_小V云端数据库 | 2020.9.14—2020.9.18
- php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别
- Java引入依赖aar_java – 如何将JAR依赖项包含到AAR库中
- php文件内含有隐藏的^m字符,【整理】如何取消Linux下,vi中显示的^M符号
- PTA---指针错误汇总(就自己做个笔记)
- 为什么双层循环 冒泡排序_冒泡排序的双重循环理解
- android运行过程简书,Android系统的启动流程