1、题面:
https://pintia.cn/problem-sets/994805342720868352/problems/994805345078067200
2、题意:
给出数的前序、中序
求后序输出的第一个值
3、正解:
4、错误:
没考虑到纯右子树的情况
5、思维:
这应该是最简洁的思路了,骄傲(‾◡◝)
一开始发现,只要找到pre[0]在第i个,然后直接输出mid[i]即为解
这样交上去有一个测试点过不掉
接着想到
3
1 2 3
1 2 3
4
1 2 3 4
1 3 2 4
两种情况。
然后想到可以舍弃pre[0],以右子树为新数重新做一次。递归就出来了
So easy
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e4+10;
int mid[N],pre[N],n;
void work(int x){
if(x==n){
cout<<pre[n-1]<<endl;
return ;
}
for(int i=x;i<n;i++){
if(mid[i]==pre[x]){
if(i==x) work(x+1);
else cout<<pre[i]<<endl;
return ;
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++) scanf("%d",&pre[i]);
for(int i=0;i<n;i++) scanf("%d",&mid[i]);
work(0);
}