题意:
Homer教授被报道失踪了,我们怀疑这和他最近的研究有关,但是我们确实不知道他最近在研究什么.
侦探们试图侵入他的电脑,再几次失败后才意思到教授的智力超出他们很多..........................................................
输入:
第一行输入一个数字表示树的数目(1<T<20),每个树的输入结尾以#结尾,从上到下的风格画树,
每个结点的标记字符是任意一个可的打印的字符,除了‘-’,‘|’,‘ ’空格,如果一个下面有一个'|'表示它有一个儿子,下一行是一行'-',至少覆盖子树的边缘,
输出:
先序遍历
#include <stdio.h> #include<math.h> #include <memory.h> #include<queue> #include <iostream> using namespace std; string dfs(int i, int j, int total); const int N = 220; char map[N][N]; int findKey(int i, int j) { int kk = -1; for (int k = j;; k++) { if (i != 0 && map[i - 1][k] == ' ') return -1; if (map[i][k] == ' ') { return -1; } if (map[i][k] == ' ') continue; kk = k; break; } return kk; } string dfsSub(int i, int j, int total) { //有子树 while (j != 0 && map[i + 1][j - 1] == '-') j--; //找到key的开始 while (map[i + 2][j] == ' ') j++; return dfs(i + 2, j, total); } string dfs(int i, int j, int total) { string str = ""; if (i == total) return str; int next = -1; if ((next = findKey(i, j)) == -1) { return str; } j = next; str += map[i][next]; str = str + "("; if (i + 1 != total && map[i + 1][j] == '|') { string s2 = dfsSub(i + 1, j, total); str += s2; } str = str + ")"; //下一个key,注意上层的--- str += dfs(i, j + 1, total); return str; } int main() { //freopen("d:\1.txt", "r", stdin); int n; cin >> n; getchar(); while (n--) { memset(map, 0, sizeof(map)); int total = 0; while (true) { gets(map[total]); if (map[total][0] == '#') { break; } total++; } string str = "("; str += dfs(0, 0, total); str += ")"; cout << str << endl; } return 0; }
感觉还是不能看别人题解!!!!!!!