#include<iostream>
#include<string>
using namespace std;
int N ;
void dfs(string arr)
{
if (arr.size() > 1)
{
dfs(arr.substr(0, arr.size() / 2));
dfs(arr.substr(arr.size() / 2));
}
int countone=0, countzero=0;
for (int i = 0; i < arr.size(); i++)
{
if (arr[i] == '0')
countzero++;
if (arr[i] == '1')
countone++;
}
if (countone&&countzero)
cout << 'F';
else if (countone)
cout << 'I';
else
cout << 'B';
}
int main()
{
cin >> N;
string arr;
cin >> arr;
dfs(arr);
}
这是后序遍历的写法
中序遍历:
void dfs(string arr)
{
if (arr.size() > 1)
{
dfs(arr.substr(0, arr.size() / 2));
}
int countone=0, countzero=0;
for (int i = 0; i < arr.size(); i++)
{
if (arr[i] == '0')
countzero++;
if (arr[i] == '1')
countone++;
}
if (countone&&countzero)
cout << 'F';
else if (countone)
cout << 'I';
else
cout << 'B';
if (arr.size() > 1)
{
dfs(arr.substr(arr.size() / 2));
}
}
前序遍历:
void dfs(string arr)
{
int countone=0, countzero=0;
for (int i = 0; i < arr.size(); i++)
{
if (arr[i] == '0')
countzero++;
if (arr[i] == '1')
countone++;
}
if (countone&&countzero)
cout << 'F';
else if (countone)
cout << 'I';
else
cout << 'B';
if (arr.size() > 1)
{
dfs(arr.substr(0, arr.size() / 2));
dfs(arr.substr(arr.size() / 2));
}
}
就是把递归函数与输出语句的位置调换以下就可以了。二叉树核心还是这个递归,另外这道题处理的是调用库函数string中的函数来处理数据就很方便了。