Undraw the Trees
Description
将多叉树转化为括号表示法。每个结点用除了‘-’, ‘|’, ‘ ’(空格), ‘#’ 的其他字符表示,每个非叶结点的正下方会有一个 ‘|’ 字符,然后下面是一排 ‘-’ 字符,恰好覆盖所有子节点的上方。单独的一行 ‘#’ 为数据结束。
Examples
Input
2
A
|
--------
B C D
| |
----- -
E F G
#
e
|
----
f g
#
Output
(A(B()C(E()F())D(G())))
(e(f()g()))
正确解法:
dfs吧
求出有几行,然后找到第一个字母,输出 ”(字母 ” 往下递推 最后输出 “ )”
递推:字母下一行一定是 | 再往下是 ---- 再下面是字母 ,找到字母 然后依次递推。
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<map> 6 #include<set> 7 #include<vector> 8 #include<queue> 9 #include<algorithm> 10 #include<cmath> 11 using namespace std; 12 typedef long long ll; 13 const int N = 300; 14 int T,n; 15 char tree[N][N]; 16 void dfs(int r,int c) 17 { 18 printf("%c(",tree[r][c]); 19 int aa=c,bb=c; 20 if(r+1<n&&tree[r+1][c]=='|') 21 { 22 while(r+2<n&&aa-1>=0&&tree[r+2][aa-1]=='-') aa--; 23 while(r+2<n&&tree[r+2][bb+1]=='-') bb++; 24 for(int i=aa;i<=bb;i++) 25 if(tree[r+3][i]!=' '&&tree[r+3][i]!='