【二叉树】已知前序、中序求后序
代码
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> pre, in, post;
void post_order(int root, int start, int end){
if(start > end) return;
int i = start;
while (i < end && in[i] != pre[root]) i++;
post_order(root+1, start, i-1);
post_order(root+i-start+1, i+1, end);
post.push_back(pre[root]);
}
int main(){
int n, num;
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%d", &num);
pre.push_back(num);
}
for (int i = 0; i < n; i++){
scanf("%d", &num);
in.push_back(num);
}
post_order(0, 0, n-1);
printf("%d", post[0]);
for (int i = 1; i < n; i++)
printf(" %d", post[i]);
return 0;
}