题解:通过后序序列找到根节点,并输出,然后用根节点将中序序列分成左右子树,可以得到左右子树的节点数,再根据节点数找出后序序列的左右子树,其左右子树的最后一个节点都为根节点,然后重复这过程递归下去
本题还使用了substr(i,length)函数(i开始截取的下标,length字符串长度),和find()函数(查询并获取下标);
上代码:
#include <iostream>
#include <string>
using namespace std;
void pre(string in,string after)
{
if(after.size()>0)
{
char c=after[after.size()-1];///根节点,输出
cout<<c;
int sign=in.find(c);///寻找中序序列的根节点的下标,获得左右子树的长度
///递归左右子树,注意下标,和长度
pre(in.substr(0,sign),after.substr(0,sign));
pre(in.substr(sign+1,in.size()-sign),after.substr(sign,in.size()-sign-1));
}
}
int main()
{
string a,b;cin>>a>>b;
pre(a,b);
return 0;
}