luogu 1030 求先序遍历

此题给出中序遍历和后序遍历后的序列,乍一看确乎想不出法子解决,毕竟是逆向思维;

但是后序遍历的特殊性质 son1,son2,x 使得后序的末尾便是根节点,再由中序天然的递归性质便可递归输出,用下find,substr便极为好做

#include<bits/stdc++.h>
using namespace std;

void be(string in,string af){
    if(in.size()){
        char ch=af[af.size()-1];
        cout<<ch;
        int k=in.find(ch);
        be(in.substr(0,k),af.substr(0,k));
        be(in.substr(k+1),af.substr(k,af.size()-1-k));
    }
}
int main(){
    string in,af;
    cin>>in>>af;
    be(in,af);
    return 0;
}

 

posted @ 2018-08-23 22:20  ASDIC减除  阅读(113)  评论(0编辑  收藏  举报