//1020. Tree Traversals (25)
//递归
//将层次遍历存储在数组里面就ok
//accept
#include <iostream>
#include <algorithm>
using namespace std;
int PostOrder[31];
int InOrder[31];
int result[35][35] = {0};
int index[35] = {0};
int level = 0;
void recursive(int s1, int e1, int s2, int e2)
{
if (s1 > e1 || s2 > e2)
{
return;
}
int tmp = PostOrder[e1];
//cout << " " << tmp;
level++;
int* pos = find(InOrder+s2, InOrder + e2 + 1, tmp);
int end2 = pos - InOrder;
result[level][index[level]] = tmp;
index[level]++;
recursive(s1, s1 + (end2 - 1 - s2), s2, end2 -1);
recursive( s1+ end2 - s2, e1-1, end2 + 1, e2);
level--;
}
int main()
{
int N;
cin >> N;
int i;
for (i = 0;i<N;i++)
{
cin >> PostOrder[i];
}
for (i = 0;i<N;i++)
{
cin >> InOrder[i];
}
int root = PostOrder[N-1];
cout << root;
int* pos = find(InOrder, InOrder + N, root);
int end2 = pos - InOrder;
int num = end2;
level = 0;
recursive(0, end2 - 1, 0, end2 - 1);
level = 0;
recursive(end2, N-2,end2+1,N-1 );
int j;
i = 1;
while(1)
{
for (j = 0;j<index[i];j++)
{
cout << " " << result[i][j];
}
if (index[i] == 0)
{
break;
}
i++;
}
return 0;
}
PAT 1020. Tree Traversals (25)
最新推荐文章于 2022-07-10 16:44:34 发布