题目:http://202.194.62.52/contest/1824/problem/2 题意:给出先序遍历和中序遍历,求后序遍历。 先序遍历:根->左树->右树 中序遍历: 左树->根->右树 样例解释: input: DBACEGF ABCDEFG //前序遍历是DBACEGF,中序遍历是ABCDEFG output: ACBFGED 因为前序先遍历根 中序中间是根,可知D是根,所以BAC(ABC)是左大树,EGF(EFG)是右大树。同样的道理,得左大树:B是根,A是左树,C是右树 得右大树:E是根,G是左树,是右树 思路:先找到根,之后在左树中递归,右树中递归
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e9+1;
string a,b ;
void find(ll al,ll ar,ll bl,ll br)
{
ll root;
if(al>ar||bl>br)return ;
for(ll i=bl;i<=br;i++)
{
if(b[i]==a[al])
{
root=i;
break;
}
}
find(al+1,al+root-bl,bl,root-1) ;
find(al+root-bl+1,ar,root+1,br) ;
cout<<a[al];
}
int main()
{
while(cin>>a>>b)
{
ll len=a.size();
find(0,len-1,0,len-1);
putchar('\n');
}
}
|