将一棵多叉树转换为括号表示。直接在一个二维数组里递归。一道比较水的题,但被数据给恶心到了,‘#’不可以表示结点,注意空树的处理,(第一行为空,别的能构成一棵树,这也为空树,例如{
(此行为空)
a
|
-----
b c
}
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[25][205];
int n;
void dfs(int r, int c)
{
if(a[r][c] == ' ' || a[r][c] == '#') return;
printf("%c(", a[r][c]);
if(r+1 < n && a[r+1][c] == '|')//有子树
{
int i = c;
while(i-1 >= 0 && a[r+2][i-1] == '-')//找---左界
i--;
while(a[r+2][i] == '-' && a[r+3][i] != '\0')
{
if(!isspace(a[r+3][i]))
dfs(r+3, i);
i++;
}
}
printf(")");
}
int main()
{
int t; cin >> t;
getchar();
while(t--)
{
char s[205];
memset(a, 0, sizeof(a));
int j = 0;
while(1)
{
gets(s);
int len = strlen(s);
for(int i = 0; i < len; i++)
a[j][i] = s[i];
if(a[j][0] == '#') break;
j++;
}
n = j;
printf("(");
for(int i = 0; i < 205; i++)
{
if(a[0][i] != '\0')
{
dfs(0, i);
}
}
printf(")\n");
}
return 0;
}