#include <bits/stdc++.h>
using namespace std;
const int maxn=1e2+5,inf=0x3f3f3f3f;
typedef long long ll;
typedef struct Node *node;
struct Node{
char val;
node lf,rf;
};
char zx[maxn],xx[maxn];
node create(char zx[],char xx[],ll len){
if(!len) return nullptr;
else{
node t=new Node({xx[0],nullptr,nullptr});//向节点里面插入值
ll i=0;
while(zx[i++]!=xx[0]);//找到根节点的下一位
t->lf=create(zx,xx+1,i-1);//左子树(中序根节点不动,前序根节点向前走一位,长度当然是i-1辣!)
t->rf=create(zx+i,xx+i,len-i);//右子树(中序加i,正好是右子树的起点,先序也加i,长度自然是len-i)
return t;
}
}
void dfs(node t){//后序遍历
if(t==nullptr) return;
dfs(t->lf);
dfs(t->rf);
cout << t->val;
}
int main(){
node t=nullptr;
scanf("%s%s",zx,xx);
t=create(zx,xx,strlen(zx));
dfs(t);
return 0;
}
P1827 [USACO3.4]美国血统 American Heritage
最新推荐文章于 2023-12-22 17:51:06 发布