zoukankan      html  css  js  c++  java
  • uva-10562-二叉树

    题意:

    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;
    }
    

      感觉还是不能看别人题解!!!!!!!

  • 相关阅读:
    单例模式
    java笔记 chapter7 抽象类和数组
    java笔记 chapter6 StringBuffer类和String Bulider类,Math类 Date类,Calendar类
    设计上的若干问题
    Java中的二次分发
    关于抽象
    SSI框架下同一个Bean加载了2次问题解决
    Hello 2015
    关于window.location.href is not a function在FF,chrom报错问题
    使用Eclipse的一些小心得!
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/7290363.html
Copyright © 2011-2022 走看看