2014-07-01 23:43:19
题意&思路:以图像的形式给出二叉树,额,有点结合了第一章的字符处理的技巧(getline()函数)。既然题目已经给出了完整的二叉树,那么遍历DFS即可,注意细节。
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <string> 5 #include <sstream> 6 using namespace std; 7 8 char g[205][205]; 9 int Case,row; 10 11 void Dfs(int d,int l,int r){ 12 if(d > row) return; 13 for(int i = l; i <= r; ++i){ 14 if(i < strlen(g[d]) && g[d][i] != ' ' && g[d][i] != '-' && 15 g[d][i] != '|' && g[d][i] != '#'){ 16 printf("%c(",g[d][i]); 17 if(g[d + 1][i] == '|'){ 18 int tl,tr; 19 tl = tr = i; 20 while(g[d + 2][tl - 1] == '-') --tl; 21 while(g[d + 2][tr + 1] == '-') ++tr; 22 Dfs(d + 3,tl,tr); 23 } 24 printf(")"); 25 } 26 } 27 } 28 29 int main(){ 30 string str; 31 cin >> Case; 32 getchar(); 33 while(Case--){ 34 row = 0; 35 memset(g,0,sizeof(g)); 36 while(getline(cin,str)){ 37 if(str[0] == '#') 38 break; 39 for(int i = 0; i < str.size(); ++i) 40 g[row][i] = str[i]; 41 ++row; 42 } 43 printf("("); 44 Dfs(0,0,strlen(g[0])); 45 printf(")\n"); 46 } 47 return 0; 48 }