1364:二叉树遍历(flist)
这题想了好久,实在没有找到两种遍历之间明确的关系规律(像前序遍历和中序遍历之间是有明确的关系规律的,参考)
后来搜了一下题解,发现其中也有一半的暴力成分(当然,下面的代码也是这种风格 ̄□ ̄||)。
下面的思路主要是利用中序遍历的特点(当然,也需要依赖层序遍历根节点必定在子节点之前的特点)。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
string s1,s2;
int len1,len2;
void solve(int l,int r){
int j;
for(int i=0;i<len2;i++){
int t=0;
for(j=l;j<=r;j++){
if(s2[i]==s1[j]){
cout<<s1[j];
t=1;
break;
}
}
if(t)break;
}
if(j>l)solve(l,j-1);
if(j<r)solve(j+1,r);
}
int main(){
std::ios::sync_with_stdio(false);
cin>>s1>>s2;
len1=s1.length();len2=s2.length();
solve(0,s1.length()-1);
return 0;
}
提高cin/cout性能:(参考详情)
std::ios::sync_with_stdio(false)