后序遍历的顺序是左右根,所以递归顺序也就应该是左右根。

#include <iostream>
#include <string>
using namespace std;
string s;
void dfs(int l, int r) {
    if (l == r) {
        if (s[l] == '1')cout << 'I';
        if (s[l] == '0')cout << 'B';
        return;
    }
    bool flag1 = false;
    bool flag2 = false;
    int mid = (l + r) / 2;
    dfs(l, mid);
    dfs(mid + 1, r);
    for (int i = l; i <= r; i++) {
        if (s[i] == '0')flag1 = true;
        if (s[i] == '1')flag2 = true;
    }
    if (flag1 && flag2)cout << 'F';
    else if (flag1)cout << 'B';
    else if (flag2)cout << 'I';
}
int main()
{
    int n;
    cin >> n;
    cin >> s;
    dfs(0, s.size() - 1);
}