/*
由前序遍历可以找到树根,然后从中序遍历中就找到了左、右子树
最后按照先遍历左子树再遍历右子树的方式递归找下去
*/
#include<iostream>
#include<cstdio>
using namespace std;
int pre[1005],in[1005],n,cnt;
void ListTree(int l,int r)
{
if(l>r)
return;
cnt++;
if(l==r)
{
printf("%d ",in[l]);
return;
}
int rt=cnt;
for(int i=l;i<=r;i++)
if(in[i]==pre[rt])
{
ListTree(l,i-1);
ListTree(i+1,r);
break;
}
printf("%d",pre[rt]);
if(rt>1)//最后一个空格不输出
putchar(' ');
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%d",pre+i);
for(int i=1;i<=n;i++)
scanf("%d",in+i);
cnt=0;
ListTree(1,n);
putchar('\n');
}
}
/*
9
1 2 4 7 3 5 8 9 6
4 7 2 1 8 5 9 3 6
*/
hdu1710
最新推荐文章于 2023-04-10 19:18:56 发布