本题目要求用先序序列和后序序列构造一棵正则二叉树(树中结点个数不超过10个),并输出其中序序列。
输入格式:
在第一行中输入元素个数。
第二行中输入先序序列,用空格分隔。
第三行中输入后序序列,用空格分隔。
输出格式:
输出此正则二叉树的中序序列,用空格分隔,最后也有一个空格。
样例">输入样例:
5
10 20 30 40 50
20 40 50 30 10
输出样例:
20 10 40 30 50
#include<bits/stdc++.h>
using namespace std;
const int N = 20;
int a[N],b[N];
vector<int>ans;
void get_zhong(int l1,int r1,int l2,int r2)
{
if(l1 == r1)
{
ans.push_back(a[l1]);
return ;
}
if(a[l1] == b[r2])
{
int i = l1 + 1;
while(i <= r1 && a[i] != b[r2 - 1]) i++;
if(i - l1 > 1)
get_zhong(l1+1,i-1,l2,l2 + (i - l1 - 1) - 1);
ans.push_back(b[r2]);
get_zhong(i,r1,l2 + (i - l1 - 1),r2-1);
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
get_zhong(0,n-1,0,n-1);
for(int i=0;i<ans.size();i++)
cout<<ans[i]<<' ';
return 0;
}