样例输入:
3
10001011
样例输出:
IBFBBBFIBFIIIFF
由题目分析可得,串的长度为,输出为串的后序遍历,即左右根,那么就要先走到左右叶子结点,所以可以考虑二分递归,将字符串拆分成长度为一的子串后再进行下一步递归。
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n;
char s[N];
void dfs(int l,int r){
int mid=(l+r)/2;
if(l!=r){//拆分
dfs(l,mid);
dfs(mid+1,r);
}
int a=0,b=0;//a,b用来统计该段字符串内0,1个数
for(int i=l;i<=r;i++){
if(s[i]=='0') a+=1;
else b+=1;
}
if(a!=0&&b!=0) cout<<"F";
else if(a!=0) cout<<"B";
else if(b!=0) cout<<"I";
}
int main(){
ios::sync_with_stdio(false);
cin>>n;
cin>>(s+1);
n=pow(2,n);//长度为2的n次方
dfs(1,n);
return 0;
}