题目描述
已知一棵二叉树的后序遍历和中序遍历,求先序遍历。
输入
两行,分别为后序遍历和中序遍历序列。
输出
一行,求出来的先序遍历。
样例输入
debca
dbeac
样例输出
abdec
分析:
本题为二叉树的遍历,可以使用递归来推左右子树,
核心代码如下:
void tree(int l1,int r1,int l2,int r2)
{
int i;
for(i=l2;i<=r2;i++){
if(a[r1]==b[i]){
cout<<a[r1];
tree(l1,r1-(r2-i)-1,l2,i-1);
tree(l1+(r2-i),r1-1,i+1,r2);
}
}
}
在 main( )中,只要调用即可。
完整代码:
/*
Name:gsr
Date:25/02/23
number:7929 Problem T
*/
#include<bits/stdc++.h>
using namespace std;
string a,b;
int lena,lenb;
void tree(int l1,int r1,int l2,int r2);
int main(){
cin>>a>>b;
lena=a.size();
lenb=b.size();
tree(0,lena-1,0,lenb-1);
}
void tree(int l1,int r1,int l2,int r2)
{
int i;
for(i=l2;i<=r2;i++){
if(a[r1]==b[i]){
cout<<a[r1];
tree(l1,r1-(r2-i)-1,l2,i-1);
tree(l1+(r2-i),r1-1,i+1,r2);
}
}
}