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; }