思路

长度是2^n , 每次都是分成相同的两份 , 写好递归函数就行了

递归函数定义 : 返回 s的后序遍历序列

  1. 输出左子树
  2. 输出右子树
  3. 返回当前节点类型

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N =1e5+10;
const int inf = INT_MAX ;
typedef pair <int, int > pii;
typedef priority_queue<int ,vector<int> ,greater<int>> small_heap;
#define int long long  

char FBI(string s)
{
    int n = s.length();
    if (n > 1 )
    {
        cout <<FBI(s.substr(0,n/2));
        cout <<FBI(s.substr(n/2,n));
    }
    if (s == string(n,'0')) return 'B';
    if (s == string(n,'1')) return 'I';
    return 'F';
}
int32_t main()
{
    int n ;cin >> n;
    string s;
    cin >>s;
    cout <<FBI(s) <<endl;
    return 0;
}