1364:二叉树遍历(flist)

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)

posted @ 2021-09-16 21:05  Rekord  阅读(618)  评论(0编辑  收藏  举报