#include<bits/stdc++.h>
using namespace std;
#define MAX 51
const int INF = 0x3f3f3f3f;
typedef pair<int,int> Pair;
typedef unsigned long long int ull;
vector<int> post(31);
vector<int> infix(31);
vector<int> seq[31];
int n,a_pos;
void dfs(int left, int right, int level)
{
if(right<left)
{
++a_pos;
return;
}
int i,j,k;
for(i=left; i<=right; ++i)
if(infix[i] == post[a_pos])
break;
seq[level].insert(seq[level].begin(), post[a_pos]);
--a_pos;
dfs(i+1, right, level+1);
--a_pos;
dfs(left, i-1, level+1);
return;
}
int main(void)
{
int i,j,k;
cin >> n;
for(i=1; i<=n; ++i)
cin >> post[i];
for(i=1; i<=n; ++i)
cin >> infix[i];
a_pos = n;
dfs(1,n,1);
int pos = 1;
while(seq[pos].size()!=0)
{
if(pos == 1)
printf("%d", seq[pos][0]);
else
for(i=0; i<(int)seq[pos].size(); ++i)
printf(" %d", seq[pos][i]);
++pos;
}
cout << endl;
return 0;
}
二叉树建树(后序遍历+中序遍历)
最新推荐文章于 2024-06-09 17:25:13 发布