重建二叉树题
存树
// ABEDFCHG
// CBADEFGH
#include<iostream>
using namespace std;
const int N = 30;
struct Node{
char val;
int l, r;
}tr[N];
int st[N];
int cnt;
string a, b;
int dfs(int l1, int r1, int l2, int r2){
if(l1 > r1) return 0;
int u = ++ cnt;
tr[u].val = b[l2];
int idx = st[b[l2] - 'A'];
tr[u].l = dfs(l1, idx - 1, l2 + 1, l2 + idx - l1);
tr[u].r = dfs(idx + 1, r1, l2 + idx - l1 + 1, r2);
return u;
}
void print(int u){
if(tr[u].l) print(tr[u].l);
if(tr[u].r) print(tr[u].r);
cout << tr[u].val;
}
int main(){
cin >> a >> b;
for(int i = 0; i < a.size(); i ++) st[a[i] - 'A'] = i;
print(dfs(0, a.size() - 1, 0, b.size() - 1));
}
不存树
#include<iostream>
using namespace std;
const int N = 30;
int st[N];
string a, b;
void dfs(int l1, int r1, int l2, int r2){
if(l1 > r1) return;
int idx = st[b[l2] - 'A'];
dfs(l1, idx - 1, l2 + 1, l2 + idx - l1);
dfs(idx + 1, r1, l2 + idx - l1 + 1, r2);
cout << b[l2];
}
int main(){
cin >> a >> b;
for(int i = 0; i < a.size(); i ++) st[a[i] - 'A'] = i;
dfs(0, a.size() - 1, 0, b.size() - 1);
return 0;
}