Problem Description
已知前序和中序 求后序
Input
The input contains several test cases. The first line of each test case contains a single integer n (1<=n<=1000), the number of vertices of the binary tree. Followed by two lines, respectively indicating the preorder sequence and inorder sequence. You can assume they are always correspond to a exclusive binary tree.
Output
For each test case print a single line specifying the corresponding postorder sequence.
Sample Input
9
1 2 4 7 3 5 8 9 6
4 7 2 1 8 5 9 3 6
Sample Output
7 4 2 8 9 5 6 3 1
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int a[1005],b[1005]; void hxbl(int x,int y,int n,int flag) { if(n==1) { printf("%d ",b[y]); return; } if(n<=0) return; int i; for(i=0; a[x]!=b[y+i]; i++); hxbl(x+1,y,i,0); hxbl(x+i+1,y+i+1,n-i-1,0); if(flag==1) printf("%d",a[x]); else printf("%d ",a[x]); } int main() { int n; while(scanf("%d",&n)==1) { for(int i=1; i<=n; i++) scanf("%d",a+i); for(int i=1; i<=n; i++) scanf("%d",b+i); hxbl(1,1,n,1); printf("\n"); } return 0; }