描述
·题目描述
给定一棵二叉树的先序遍历和中序遍历,求其后序遍历。
·输入描述
读入 2 个两个字符串,每个一行,长度均小于等于 26。
第一行为先序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示 :A,B,C... 。
·输出描述
输出一行,为后序遍历的字符串。
·样例输入
ABC
CBA
·样例输出
CBA
解题
·定义
定义前序后序
string s1,s2;
创建dfs函数
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);//调用dfs函数
}
·完整代码
#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);//调用dfs函数
}