P1030 求先序排列

题目

题解:通过后序序列找到根节点,并输出,然后用根节点将中序序列分成左右子树,可以得到左右子树的节点数,再根据节点数找出后序序列的左右子树,其左右子树的最后一个节点都为根节点,然后重复这过程递归下去

本题还使用了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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值