UVA_10562

    建树的过程并不算复杂,找好比较容易处理的一个部分看做一个阶段,然后递归即可。

    一开始没有仔细审题,误以为根节点只能是字母,而且还忽略了树为空的情况。

#include<stdio.h>
#include<string.h>
#define MAXD 210
int N;
char b[MAXD][MAXD];
void dfs(int x, int y)
{
int i, j, k;
for(i = y; b[x][i] == '-'; i ++)
if(b[x + 1][i] != ' ' && b[x + 1][i] != '\0')
{
printf("%c(", b[x + 1][i]);
if(x + 1 < N && b[x + 2][i] == '|')
{
for(j = i; j && b[x + 3][j - 1] == '-';j --);
dfs(x + 3, j);
}
printf(")");
}
}
void solve()
{
int i, j, k;
for(i = 0; b[1][i]; i ++)
b[0][i] = '-';
printf("(");
dfs(0, 0);
printf(")\n");
}
int main()
{
int t;
scanf("%d", &t);
getchar();
while(t --)
{
N = 1;
memset(b, '\0', sizeof(b));
while(gets(b[N]) != NULL)
{
if(b[N][0] == '#')
{
-- N;
break;
}
++ N;
}
if(N == 0)
printf("()\n");
else
solve();
}
return 0;
}


posted on 2011-12-29 19:47  Staginner  阅读(467)  评论(0编辑  收藏  举报