uva10562 看图写树
你的任务是将多叉树转化为括号表示法。如下图所示,每个结点除了"-","|",’#‘和空格的其他字符表示,每个非叶结点的正下方总会有一个’|‘字符,然后下方是一排"-"字符,恰好覆盖在所有子节点的上方,单独的一行’#'为数据结束的标记。
输入
2
A | -------- BC D | | ----- - E FG # e | ---- f g #
输出
(A(B()C(E()F())D(G())))
(e(f()g()))
这个题就只是模拟一下建树的过程。dfs走一遍即可,稍微注意下数据的读取方式
#include <bits/stdc++.h> using namespace std; char a[205][205]; void dfs(int i,int u) { int j,front,rear; front=i;rear=i; printf("%c(",a[u][i]); if(a[u+1][i]!='|') { cout<<")";return ;}// 此时为空树 for(;;) { if(a[u+2][front-1]=='-') front--; else break; } for(;;) { if(a[u+2][rear+1]=='-') rear++; else break; } for(int j=front;j<=rear;j++) if(a[u+3][j]!=' '&&a[u+3][j]!='\0') dfs(j,u+3); cout<<")"; } int main() { int t; cin>>t; getchar(); while(t--) { int i=0; memset(a,' ',sizeof(a)); while(gets(a[i])&&'#'-a[i][0])//仍有输入并且不是结束符,循环读入。 i++; cout<<"("; if(i) { for(i=0;i<strlen(a[0]);i++)//在第一行找到树的起始位置。 if(a[0][i]!=' ') dfs(i,0); cout<<")"<<endl; } } return 0; }

浙公网安备 33010602011771号