本题和P1827 [USACO3.4] 美国血统相似就连代码基本都差不多(知道前序,中续求-->)后序
本题(知道后序,中序求-->前序)
先放ACcode,兄弟们直接来个赞,哈哈哈:
#include<iostream>
#include<string>
using namespace std;
string mid,last;
void work_pre(string mid,string last){//求先序
if(last.empty()){//结束
return ;
}
char root=last[last.size()-1];//找根节点
last.erase(last.size()-1);
int k=mid.find(root);//
string left_last=last.substr(0,k);
string right_last=last.substr(k);
string left_mid=mid.substr(0,k);//划分
string right_mid=mid.substr(k+1);//划分
//先序:根,左,右
cout<<root;//根
work_pre(left_mid,left_last);//左
work_pre(right_mid,right_last);//右
}
int main(){
cin>>mid>>last;
work_pre(mid,last);
return 0;
}
知道后续,中序求-->前序 | 知道前序,中续求-->后序
没差别,就把pre换成last,然后root从last最后开始读,也从最后开始最后删除
over~