问题描述
  我们可以把由“”和“”组成的字符串分为三类:全“”串称为B串,全“”串称为I串,既含“”又含“”的串则称为F串。
  FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“”串S可以构造出一棵FBI树T,递归的构造方法如下:
  )T的根结点为R,其类型与串S的类型相同;
  )若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
  现在给定一个长度为2N的“”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。
输入格式
  第一行是一个整数N( <= N <= ),第二行是一个长度为2N的“”串。
输出格式
  包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。
样例输入 样例输出
IBFBBBFIBFIIIFF
数据规模和约定
  对于40%的数据,N <= ;
  对于全部的数据,N <= 。
  注:
  [] 二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。这两棵不相交的二叉树分别称为这个根结点的左子树和右子树。
  [] 后序遍历:后序遍历是深度优先遍历二叉树的一种方法,它的递归定义是:先后序遍历左子树,再后序遍历右子树,最后访问根。

记:

一开始解题根据惯用FBI树解法:建树->递归判断数据并记录->后序输出树

        

这种解法在输入n较大时会出现超时现象,

明显在建树以及后序输出遍历输出树的过程浪费了很多时间;

本题中的数据采用二叉树存储,而且是后序遍历输出树

所以我们可以采用类似二分查找的形式,

先对输入数据进行二分区,然后进行判断

输出判断后的字符('F','B','I'),并返回

从而节省了建树以后序遍历输出树的时间。

AC代码:

 #include <stdio.h>
#define MAX (1<<10) int n = ;
char str[MAX+] = {}; void init()
{
int i,j;
scanf("%d",&n);
for (i = ; i <= (<<n) ; i ++)
{
scanf("%1d",&j);
/*将输入的数字串转换为FBI串*/
if (j)
{
str[i] = 'I';
}
else
{
str[i] = 'B';
}
}
return ;
} char check(char l,char r)
{
if (l == 'B' && r == 'B')
{
return 'B';
}
else if (l == 'I' && r == 'I')
{
return 'I';
}
else
{
return 'F';
}
} char fbi(int x,int y)
{
int i = x , j = y , k = (y-x)/;
char l,r,ans = str[i];
if (i < j)
{
/*递归分区间*/
l = fbi(i,i+k);/*左子树*/
r = fbi(j-k,j);/*右子树*/
ans = check(l,r);
}
printf("%c",ans);
return ans;
} int main(void)
{
init();
fbi(,<<n);
return ;
}

ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)的更多相关文章

  1. ALGO-143_蓝桥杯_算法训练_字符串变换

    问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌握情况.徐老师自己定义了1,,,,5这5个参数分别指代不同的5种字符串操作, ...

  2. ALGO-6_蓝桥杯_算法训练_安慰奶牛

    记: 本题目考的是最小生成数,可使用Kruskal算法 第一次,20分 原因:使用动态数组,有概率报运行错误(大雾= =) 第二次,100分 原因:改用静态数组,一次过 示例代码: #include ...

  3. ALGO-5_蓝桥杯_算法训练_最短路

    记: 一开始没接触过关于最短距离的算法,便开始翻阅关于图的知识, 得知关于最短距离的算法有Dijkstra算法(堆优化暂未看懂),Bellman-Ford算法,Floyd算法,SPFA算法. 由于数据 ...

  4. 蓝桥杯_算法训练_ALGO10_集合运算

    这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...

  5. 蓝桥杯_算法训练_Torry的困惑(基本型)

    这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...

  6. 蓝桥杯_算法训练_区间k大数查询

    问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...

  7. ALGO-43_蓝桥杯_算法训练_A+B Problem

    问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...

  8. ALGO-39_蓝桥杯_算法训练_数组排序去重

    问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...

  9. ALGO-115_蓝桥杯_算法训练_和为T(枚举)

    问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...

随机推荐

  1. linux管道命令之head与tail

    常常会遇到这样的情况: 1.我训练一个模型需要用到很多图片,这些图片都在一个文件夹下面,但是我想仅仅拷贝个一两张看一下图片的质量怎么样? 2.文件夹下有各种各样的数据,数目非常庞大,我想看一下文件夹下 ...

  2. 阿里云-centos7.2-LNMP-编译安装-记录

    1. 需要使用yum源自动安装的软件: yum -y install autoconf bzip2 bzip2-devel curl curl-devel e2fsprogs e2fsprogs-de ...

  3. 获取div,表单中的内容

    获得内容 - text().html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元 ...

  4. 20155208徐子涵 2016-2017-2 《Java程序设计》第10周学习总结

    #### **教材学习总结**网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. * ...

  5. python------模块定义、导入、优化 ------->os模块

    1. os模块 提供对操作系统进行调用的接口. 1 os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 'C:\\Users\\maziwei' os.chdir() # ...

  6. 【BZOJ2229】【ZJOI2011】最小割

    冷门知识点…… 原题: 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中 ...

  7. Mybatis二(高级部分)

    1.输入映射和输出映射 a)        输入参数映射 b)        返回值映射 2.动态sql a)        If标签 b)        Where标签 c)        Sql片 ...

  8. File file = new File("路径名") 路径名的2种写法

    项目的结构:相同颜色是同级的 bean的配置文件的读取和一般文件的读取有点差别的 public static void getValue(String key){ //传入"time&quo ...

  9. 每天进步一点点-Java IO操作-Java Serializable(对象序列化)的理解和总结

    往硬盘文件里写数据 序列化:序列化是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.在另一端,反序列化将从该流重 ...

  10. 使用patroni 构建高可用的pg 数据库

    patroni 是一个基于zk.etcd .consul 等的pg ha 模版,我们可以使用这个工具,快速的搭建一套 pg 的高可用方案 环境准备 mac 操作系统 安装基础差组件 brew inst ...