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