题目大意:给一个二叉树的图,要你输出相应的广义表
解题思路:递归算法,分析可得,下面的字母的前一行都是‘-’标志符,‘-’标志符下的字母都是上一个的子树,连接上一个子树的是‘|’符号,所以只要确定字母下面是否有‘|’号,就可以知道他是否有子树,如果有子树的话,就递归调用函数
#include<cstdio>
#include<cstring>
#include<cstdlib>
void bfs(char str[300][300], int row, int crow, int len){
int k = crow, j;
for(; str[row][k]== '-'; k++) {
if(str[row+1][k] != ' ' && str[row+1][k] && str[row+1][k] != '#') {
printf("%c(", str[row+1][k]);
if(row + 2 < len && str[row+2][k] == '|') {
for(j = k;str[row+3][j-1] == '-'; j--);
bfs(str,row+3,j,len);
}
printf(")");
}
}
}
int main() {
int test,i, j;
scanf("%d", &test);
getchar();
char str[300][300];
while(test--) {
i = 1;
memset(str,0,sizeof(str));
while(gets(str[i])) {
if(str[i][0] == '#') break;
i++;
}
int len = strlen(str[1]);
for(j = 0; j < len; j++) {
str[0][j] = '-';
}
printf("(");
bfs(str,0,0,i);
printf(")\n");
}
return 0;
}