1119 Pre- and Post-order Traversals (30 分)
思路有空更新
#include <iostream>
using namespace std;
int pre[40], post[40], in[40], ret, f;
void dfs(int l1, int l2, int l3, int l4) {
if(l1 > l2) return;
if(l1 == l2){
in[ret++] = pre[l1];
return;
}
int i = l3;
while(i < l4 && pre[l1 + 1] != post[i]) i++;
if(l1 + 1 == l2) f = 1;
dfs(l1 + 1, l1 + i - l3 + 1, l3, i);
in[ret++] = pre[l1];
dfs(l1 + i - l3 + 2, l2, i + 1, l4 - 1);
}
int main() {
int n;
cin >> n;
for(int i = 0; i < n; ++i)
cin >> pre[i];
for(int i = 0; i < n; ++i)
cin >> post[i];
dfs(0, n - 1, 0, n - 1);
if(f) cout << "No" << endl;
else cout << "Yes" << endl;
for(int i = 0; i < n; ++i)
cout << in[i] << " \n"[i == n - 1];
}