求先序排列(二叉树)
step1:找到根(后序排列的最后一个)并输出
step2:将中序(左根右),后序(左右根)各分为左右两棵子树(左右子树长度不一定相等,可能一边为0,所以只在递归前判断整棵树长度不对);
step3:递归,重复step1,2;
#include <bits/stdc++.h>
using namespace std;
void xh(string z,string h){
int l=h.size();
if(l){//~~必须要在这里判断~~
l--;
char t=h[l];
cout<<t;
int io=z.find(t);
//if(l)WA
xh(z.substr(0,io),h.substr(0,io));
xh(z.substr(io+1),h.substr(io,l-io));
}
}
int main(){
ios::sync_with_stdio(false);
string h,z;
cin>>z>>h;
xh(z,h);
cout<<endl;
return 0;
}
string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串,不写n表示从pos开始到最后一个字符组成的字符串。