#include <bits/stdc++.h>
using namespace std;
struct tree{
int l,r;
char v;
}t[3001];
string s;
int n;
int two[12]={1,2,4,8,16,32,64,128,256,512,1024,2048};
void hou(int x){
if(x==0)return;
hou(t[x].l);
hou(t[x].r);
cout<<t[x].v;
}
int main() {
cin>>n>>s;
for(int i=1;i<=two[n]-1;i++){
t[i].l=2*i;
t[i].r=2*i+1;
}
int pos=two[n];
for(int i=0;i<s.size();i++){
if(s[i]=='0')t[pos].v='B';
if(s[i]=='1')t[pos].v='I';
pos++;
}
for(int i=two[n]-1;i>=1;i--){
if(t[i*2].v=='F'||t[i*2+1].v=='F')t[i].v='F';
if(t[i*2].v=='I'&&t[i*2+1].v=='I')t[i].v='I';
if(t[i*2].v=='B'&&t[i*2+1].v=='B')t[i].v='B';
if((t[i*2].v=='I'&&t[i*2+1].v=='B')||(t[i*2].v=='B'&&t[i*2+1].v=='I'))t[i].v='F';
}
hou(1);
return 0;
}
最下层叶子节点记得区分,初始化时末尾叶子节点的左右节点要初始化为0,这样递归时可以用是否为0来判断是否到达边界(如果遇到无输出可能是这种情况)
然后就是处理问题条件要仔细,千万仔细,他妈的全是细节啊,多模拟模拟也行
substr用法: s.substr(int a,int len); // s代表要截取的字符串,a代表从第几位开始截取,len为截取长度