没什么难度的模拟题。。乍看以为是数据结构。。先用栈把树构造出来(其实就是图,我用邻接矩阵存的)然后按题目要求从小到大遍历一下就行
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<cstring>
using namespace std;
int main()
{
string s;
bool map[51][51];
while (getline(cin, s), s != "")
{
vector<int> stack;
int temp = 0, child, parent, max = 0;
memset(map, 0, sizeof(map));
for (size_t i = 0; i != s.size(); i++)
{
if (s[i] >= '0' && s[i] <= '9')
temp = temp * 10 + (s[i] - '0');
else
{
if (temp)
{
if (temp > max)
max = temp;
stack.push_back(temp);
temp = 0;
}
if (s[i] == ')')
{
child = stack.back();
stack.pop_back();
if (!stack.empty())
{
parent = stack.back();
map[parent][child] = map[child][parent] = true;
}
}
}
}
bool first = true;
while (true)
{
int i;
for (i = 1; i <= max; i++)
{
int total = 0, last;
for (int j = 1; j <= max; j++)
if (map[i][j])
{
total++;
last = j;
}
if (total == 1)
{
if (first)
first = false;
else
putchar(' ');
printf("%d", last);
map[i][last] = map[last][i] = false;
break;
}
}
if (i > max)
break;
}
putchar('\n');
}
return 0;
}