#include "bits/stdc++.h"
using namespace std;
string s1,s2;
void work(int start,int end,int boot){
if (start>end) return;
int i=start;
while(i<end&&s1[i]!=s2[boot])i++;
work(start,i-1,boot+1);
work(i+1,end,boot+1+i-start);
cout<<s1[i];
}
int main(){
cin>>s1>>s2;
work(0, s1.size()-1,0);
return 0;
}
在这段代码中,s1为中序,s2为前序,boot用来找到在前序中的根节点,
因为后序是前后根所以,代码是work左work右输出当前,根据这个思路就可以完成其他变化的输出。
主要思想,利用前序找到根节点,然后再中序中找到这个根节点,这个节点前面就是左孩子,右边是右孩子。