要求
给定一棵二叉树的先序遍历和中序遍历,求其后序遍历。
输入描述:
读入 2 个两个字符串,每个一行,长度均小于等于 26。
第一行为先序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示: A,B,C... 。
输出描述
输出一行,为后序遍历的字符串。
样例输入:
ABC
CBA
样例输出:
CBA
方法
利用递归完成
代码
递归代码
string s1,s2;
void dfs(int l1,int r1,int l2,int r2){
if(l1>r1){
return ;
}
int x=s2.find(s1[l1]);
dfs(l1+1,l1+x-l2,l2,x-1);
dfs(l1+x-l2+1,r1,x+1,r2);
cout<<s1[l1];
}
完整代码
#include <bits/stdc++.h>
using namespace std;
string s1,s2;
void dfs(int l1,int r1,int l2,int r2){
if(l1>r1){
return ;
}
int x=s2.find(s1[l1]);
dfs(l1+1,l1+x-l2,l2,x-1);
dfs(l1+x-l2+1,r1,x+1,r2);
cout<<s1[l1];
}
int main(){
cin>>s1>>s2;
dfs(0,s1.size()-1,0,s2.size()-1);
return 0;
}
如果有用就给个赞吧,谢谢支持!