#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int N;
char s[114514];
string line,post;
void postorder(char s,int index){
if(s=='F' || s=='B' || s=='I'){
postorder(line[index*2],index*2);
postorder(line[index*2+1],index*2+1);
cout<<s;
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>N;
int n=(int)pow(2,N);
for(int i=1;i<=n;i++) cin>>s[i];
if(N==0){
if(s[1]=='0') cout<<'B';
else cout<<'I';
return 0;
}
for(int i=n;i<n*2;i++){
if(s[i-n+1]=='0') line[i]='B';
else if(s[i-n+1]=='1') line[i]='I';
else line[i]='F';
}
for(int i=n-1;i>=1;i--){
if(line[i*2]=='B'){
if(line[i*2+1]=='B') line[i]='B';
else if(line[i*2+1]=='I') line[i]='F';
else line[i]='F';
}else if(line[i*2]=='I'){
if(line[i*2+1]=='B') line[i]='F';
else if(line[i*2+1]=='I') line[i]='I';
else line[i]='F';
}else{
line[i]='F';
}
}
postorder(line[1],1);
cout<<endl;
return 0;
}
各位dalao帮忙看一下
代码写得不太好,见谅