题目描述

我们可以把由“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树的后序遍历序列。

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
bool x[2000];
int y[5000],a,b,c,d,e,f,g,m,n,k,cnt,bnt,dnt,mmp;
char z,z1[20];
int cot(int p)
{
if(y[p]==3)
{
cout<<"F";
}
if(y[p]==2)
{
cout<<"I";
}
if(y[p]==1)
{
cout<<"B";
}
}
int print(int l)
{
if(mmp==g)
{
return 0;
}
if(y[l*2]==0)
{
cot(l);
mmp++;
y[l]=0;
if(l%2==0)
{
print(l+1);
}
else
{
print(l/2);
}
}
else
{
print(l*2);
}
}
int main()
{
cin>>m;
n=1;
k=1;
for(a=1;a<=m;a++)
{
n=n*2;
k=k+n;
}
g=k;
f=n;
for(a=1;a<=n;a++)
{
cin>>z;
if(z=='0')
{
x[a]=0;
}
else
{
x[a]=1;
}
} // for(a=1;a<=n;a++)
// {
// cout<<x[a];
// }
for(a=1;a<=n;a++)
{
if(x[a]==1)
{
cnt=1;
}
else
{
bnt=1;
}
} if(cnt==1&&bnt==1)
{
y[1]=3;
}
else
{
if(cnt==1)
{
for(a=1;a<=k;a++)
{
cout<<"I";
}
return 0;
}
if(bnt==1)
{
for(a=1;a<=k;a++)
{
cout<<"B";
}
return 0;
}
}
cnt=0;
bnt=0;
dnt++; // g=n;
for(a=1;a<=m;a++)
{
n=n/2;
k=f/n;
for(b=1;b<=k;b++)
{
for(c=(b-1)*n+1;c<=n*b;c++)
{
if(x[c]==1)
{
cnt=1;
}
else
{
bnt=1;
}
}
dnt++;
if(cnt==1&&bnt==1)
{
y[dnt]=3;
}
else
{
if(cnt==1)
{
y[dnt]=2;
}
if(bnt==1)
{
y[dnt]=1;
}
}
cnt=0;
bnt=0;
}
} n=f/2;
print(n);
return 0;
// gets(z1);
// for(a=1;a<=g;a++)
// {
// if(y[a]==3)
// {
// cout<<"F";
// }
// if(y[a]==2)
// {
// cout<<"I";
// }
// if(y[a]==1)
// {
// cout<<"B";
// }
// }
// system("pause");
return 0; }

FBI树的更多相关文章

  1. Vijos 1114 FBI树

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

  2. 【递归】Vijos P1114 FBI树(NOIP2004普及组第三题)

    题目链接: https://vijos.org/p/1114 题目大意: 把01串一分为二,左半边描述当前节点左子树,右半边描述右子树,子树全为1则为I节点,全为0则为B节点,混合则为F节点,直到当前 ...

  3. 创建FBI树

    需求:数串由2^n个'0' '1'数串组成,对于一个数串,有01混合出现,则视为F,全0数串为B,全1数串为I. 将给定数串进行切割,如10010011可以用二叉树表示为 F(10010011) / ...

  4. 蓝桥杯之FBI树问题

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

  5. noip普及组2004 FBI树

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

  6. Vijos P1114 FBI树【DFS模拟,二叉树入门】

    描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种 ...

  7. [题解]ybt1365:FBI树(fbi)

    ybt1365:FBI树(fbi) [题目描述] 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树,它 ...

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

    问题 B: [2004_p4]FBI树-数据结构 时间限制: 1 Sec  内存限制: 125 MB提交: 57  解决: 46 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称 ...

  9. C语言 · FBI树

    算法训练 FBI树   时间限制:1.0s   内存限制:256.0MB        锦囊1 二叉树. 问题描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I ...

  10. FBI树(第一次做建树题)

    试题来源 NOIP2004 普及组 问题描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树,它的结 ...

随机推荐

  1. CSS3新增的伪类选择器

    伪类选择器的作用:对已有选择器做进一步的限制,对已有选择器能匹配的元素做进一步的过滤.CSS 3提供的伪类选择器主要分为以下三类: 结构性伪类选择器 UI元素状态伪类选择器 其他伪类选择器 1.结构性 ...

  2. stroke和fill顺序对绘图的影响

    用canvas绘制线条和填充,fill()和stroke()调用顺序直接影响绘制的结构 先调用stroke在调用fill,绘制的效果看上去lineWidth只绘制出来一半,还以为是个大问题. < ...

  3. mui 窗体切换

    手机实现窗体切换 1.在5+环境下(即H5app) 先初始化: mui.init({ subpages:[{ url:"page1.html",//子页面HTML地址,支持本地地址 ...

  4. 怎样在vs2013和vs2015中实现自动编译sass

    Visual Studio不论是2013版本还是2015版本要自动编译都需要添加扩展. 添加扩展的方法,路径“工具”->“扩展和更新”,在打开的窗口“搜索”你需要的扩展根据提示“下载”和“安装” ...

  5. HTML 5入门知识(一)

    了解HTML 5 HTML5 并非仅仅用来表示web内容,它的使命是将web带入一个成熟的应用平台,在这个平台上,视频.音频.图像.动画,以及与电脑的交互都被标准化. HTML 5概述 HTML 5实 ...

  6. 服务器ipmi远程管理

    DELL iDRAC (Integrated Dell™ Remote Access Controller )是 Dell PowerEdge 系列服务器上的远程管理方案, 11代 12代服务器已经集 ...

  7. JavaScript递归深度问题

    递归是有限的东西: function fact(num) { if (num <= 1) { return 1; } else { return fact(num - 1); } } 测试结果是 ...

  8. mysql导入csv格式文件

    今天测试导入csv格式文件,虽然简单但是如果不注意还是会出现错误,而且mysql在某些方面做的确实对新手不是很友好,记录一下:创建一个csv格式文件:[mysql@xxx1 ycrdb]$ more ...

  9. MySQL:数据库入门篇5

    1.存储引擎 innodb与MyIASM存储引擎的区别: 1.innodb 是mysql5.5版本以后的默认存储引擎, 而MyISAM是5.5版本以前的默认存储引擎. 2.innodb 支持事物,而M ...

  10. HDU 2048 错排

    错排递推公式: d(n) = (n-1)*(d[n-1]+d[n-2]): 证明:将第n个元素放到第k处,第k处的元素如果放到第n处,就是d(n-2),否则,先假设放到第n处,然后错排,就是d(n-1 ...