这一题是将图表示的二叉树转换为括号表示的二叉树,将输入的图放在二维数组里,然后递归求解即可。具体代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
#include <string>
using namespace std;
string tree[210]; //存储输入
int height; //树的高度
void dfs(int r,int c) //tree[r][c]
{
printf("%c(",tree[r][c]);
if(r+1<height&&tree[r+1][c]=='|')
{
int i=c;
while(i-1>=0&&tree[r+2][i-1]=='-')
i--;
while(tree[r+2][i]=='-'&&i<tree[r+3].length())
{
if(!isspace(tree[r+3][i]))
dfs(r+3,i);
i++;
}
}
printf(")");
}
int main()
{
//freopen("test.txt","r",stdin);
int t;
cin>>t;
getchar();
while(t--)
{
height=0;
string line;
while(getline(cin,line))
{
if(line=="#")
break;
tree[height++]=line;
}
if(height==0)
printf("()\n");
else
for(int i=0;i<tree[0].length();i++)
if(tree[0][i]!=' ')
{
printf("(");
dfs(0,i);
printf(")\n");
break;
}
}
return 0;
}