非字串的万能做法
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
void makeTree(string pre , string in ,int preSt ,int inSt ,int count){
if(pre.empty()) return ;
int root = in.find(pre[preSt]);
int left = root - inSt;
if(left > 0 )
makeTree(pre, in ,preSt + 1,inSt , left);
int right = count - left - 1;
if(right > 0)
makeTree(pre, in ,preSt+ 1 + left ,inSt +left + 1, right);
cout<<pre[preSt];
}
int main(){
string pre ,in;
while(cin>>pre>>in){
makeTree(pre,in , 0 , 0 , pre.size());
cout<<endl;
}
}
借助substr接口实现
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
void makeTree(string preString , string inString){
if(preString.empty()) return ;
int k = inString.find(preString[0]);
makeTree(preString.substr(1 , k) , inString.substr(0 , k ));
makeTree(preString.substr(k + 1) , inString.substr(k + 1));
cout<<preString[0];
}
int main(){
string preString ,inString;
while(cin>>preString>>inString){
makeTree(preString,inString);
cout<<endl;
}
}