Description
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 ≤8≤8)。
Input
共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
Output
共一行一个字符串,表示一棵二叉树的先序。
Sample 1
Inputcopy | Outputcopy |
BADC BDCA | ABCD |
#include<iostream>
using namespace std;
string a,b;
void dfs(int xl,int xr,int yl,int yr){
if(xl>xr||yl>yr)return ;
int t=a.find(b[yr]);
cout<<a[t];
dfs(xl,t-1,yl,yl+t-xl-1);
dfs(t+1,xr,yl+t-xl,yr-1);
}
int main(){
cin>>a>>b;
dfs(0,a.size()-1,0,b.size()-1);
return 0;
}
上述题目为已知中序和后序排列求先序排列,可以进行相关扩展:
已知中序和先序排列求后序排列:
#include<iostream>
using namespace std;
string a,b;
void dfs(int xl,int xr,int yl,int yr){
if(xl>xr||yl>yr)return ;
int t=a.find(b[yl]);
dfs(xl,t-1,yl+1,yl+t-xl);
dfs(t+1,xr,yl+1+t-xl,yr);
cout<<a[t];
}
int main(){
cin>>a>>b;
dfs(0,a.size()-1,0,b.size()-1);
return 0;
}