后序遍历的顺序是左右根,所以递归顺序也就应该是左右根。
#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);
}



京公网安备 11010502036488号