#include <stdio.h>
#define MAX 1000
int to_post(int pre[], int in[], int post[], int n){
int i;
int flag1, flag2;
if (n <= 0)
return 1;
for (i=0; i<n; ++i)
if (in[i] == pre[0])
break;
if (i >= n)
return 0;
post[n-1] = pre[0];
flag1 = to_post (pre+1, in, post, i);
flag2 = to_post (pre+i+1, in+i+1, post+i, n-i-1);
return flag1 && flag2;
}
int main(void){
int pre[MAX], in[MAX], post[MAX];
int n, i;
while (scanf ("%d", &n) != EOF){
for (i = 0; i < n; ++i)
scanf("%d", &pre[i]);
for (i = 0; i < n; ++i)
scanf("%d", &in[i]);
if (to_post (pre, in, post, n)){
for (i = 0; i < n; ++i)
printf("%d ", post[i]);
putchar('\n');
}
else
printf("No\n");
}
return 0;
}
/**************************************************************
Problem: 1385
User: cust123
Language: C++
Result: Accepted
Time:0 ms
Memory:1020 kb
****************************************************************/
题目1385:重建二叉树
最新推荐文章于 2021-09-13 20:51:17 发布