1339:【例3-4】求后序遍历
先序遍历总是从根节点开始;而中序遍历则以根节点为界,将左右结点分为左右子树(前提是要确定树的范围)。
先序遍历当前节点的位置加上该节点左子树节点的个数(可从中序遍历求得),就进入该节点右子树的范畴。
#include<iostream>
#include<cstring>
using namespace std;
string pre,mid;
void solve(int pt,int l,int r){
if(l>=r){
if(l==r)cout<<pre[pt];
return;
}
int p=mid.find(pre[pt]);
solve(pt+1,l,p-1);
solve(pt+p-l+1,p+1,r);
cout<<pre[pt];
}
int main(){
cin>>pre>>mid;
solve(0,0,pre.length()-1);
return 0;
}
额外收获:
- string.find(char c)返回第一次出现c的索引(从0开始)