思路
长度是2^n , 每次都是分成相同的两份 , 写好递归函数就行了
递归函数定义 : 返回 s的后序遍历序列
- 输出左子树
- 输出右子树
- 返回当前节点类型
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;
}