代码很简单,重要的是理解思路
用中序和后序求前序的方法,网上一大堆,自己搜(CSDN)
#include <iostream>
#include <string>
using namespace std;
string a, b;
int posa[30] = {0}, posb[30] = {0};
void dfs(int iL, int pL, int len) {
if (len <= 0) return;
char root = b[pL + len - 1];
int pos = posa[root - 'A'];
int len1 = pos - iL, len2 = len - len1 - 1;
cout << root;
dfs(iL, pL, len1);
dfs(pos + 1, pL + len1, len2);
}
int main() {
cin >> a >> b;
for (int i = 0; i < a.size(); i++) {
posa[a[i] - 'A' ] = i;
}
for (int i = 0; i < b.size(); i++) {
posb[b[i] - 'A' ] = i;
}
dfs(0, 0, a.size());
return 0;
}