uva 10562

二叉树的先序遍历  这个还是比较简单的 ~~ 
/*************************************************************************
    > Author: xlc2845       > Mail: xlc2845@gmail.com
    > Created Time: 2013年10月30日 星期三 19时25分21秒
 ************************************************************************/

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
char tree[300][300];

void dfs(int l, int r, int cur)
{
	putchar('(');
	for (int i = l; i < r && tree[cur][i]; i++)
		if (tree[cur][i] != '#' && tree[cur][i] != ' ')
		{
			putchar(tree[cur][i]);
			if (tree[cur + 1][i] == '|')
			{
			    int le, re;
				for (le = i; le > 0 && tree[cur + 2][le] == '-'; le--);
				for (re = i; tree[cur + 2][re] == '-'; re++);
				dfs(le, re, cur + 3);
			}
			else
				printf("()");
		}
	putchar(')');
}

int main()
{
	int t, n;
	scanf("%d\n", &t);
	while (t--)
	{
		memset(tree, 0, sizeof(tree));
		n = 0;
		while (gets(tree[n]) != NULL)
        {
            if(tree[n][0] == '#')
                break;
            n++;
        }
		dfs(0, strlen(tree[0]), 0);
		puts("");
	}
	return 0;
}

posted @ 2013-10-30 20:29  xlc2845  阅读(125)  评论(0)    收藏  举报