本以为用之前那个二叉树遍历的代码就行,但是在过程中总是出现一些细节性问题,所以就从新写了一个用INT存储的。
import java.util.*;
public class Main{
static int[] stack=new int[1000];
static int t=0;
static int flag=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
t=0;
flag=0;
int n=sc.nextInt();
int[] s1=new int[n];
int[] s2=new int[n];
for(int i=0;i<n;i++)
s1[i]=sc.nextInt();
for(int i=0;i<n;i++)
s2[i]=sc.nextInt();
post(s1,s2);
if(flag==1)
System.out.println("No");
else{
for(int i=t-1;i>=0;i--)
System.out.print(stack[i]+" ");
System.out.println();
}
}
}
//s1,先序,s2中序
public static void post(int[] s1,int[] s2){
try{
if(s1.length==0)
return;
int i=0;
for(;i<s2.length;){
if(s2[i]==s1[0]){
break;
}
i++;
}
stack[t++]=s2[i];
//前序遍历
int[] pre=new int[i];
int[] prer=new int[s2.length-i-1];
for(int j=0;j<i;j++)
pre[j]=s1[1+j];
for(int j=0;j<s2.length-i-1;j++)
prer[j]=s1[i+1+j];
int[] midl=new int[i];
int[] midr=new int[s2.length-i-1];
for(int j=0;j<i;j++)
midl[j]=s2[j];
for(int j=0;j<s2.length-i-1;j++)
midr[j]=s2[i+j+1];
post(prer,midr);
post(pre,midl);
}
catch(Exception e){
flag=1;
}
}
}