亮点是distance函数,和递归的方法。
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int n, pos;
vector<int> pre, in, post;
void rec(int l, int r) {
if (l >= r)
return;
int root = pre[pos++];
int m = distance(in.begin(), find(in.begin(), in.end(), root));
rec(l, m);
rec(m + 1, r);
post.push_back(root);
}
int main() {
cin >> n; //节点数
int tmp;
for (int i = 0; i < n; i++) {
cin >> tmp;
pre.push_back(tmp);
}
for (int i = 0; i < n; i++) {
cin >> tmp;
in.push_back(tmp);
}
pos = 0;
rec(0, pre.size());
for (int i = 0; i < n; i++) {
if (i)
cout << " ";
cout << post[i];
}
cout << endl;
return 0;
}