题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度 \le 8≤8)。
输入格式
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
1行,表示一棵二叉树的先序。
输入输出样例
输入
BADC
BDCA
输出
ABCD
#include<bits/stdc++.h>
using namespace std;
char s1[10];
char s2[10];
int len;
inline int find(char ch)
{
for(int i=0; i<len; i++)
{
if(s1[i]==ch)
return i;
}
}
void dfs(int l1,int r1,int l2,int r2)
{
int m=find(s2[r2]);
cout<<s2[r2];
if(m>l1)
dfs(l1,m-1,l2,r2-r1+m-1);
if(m<r1)
dfs(m+1,r1,l2+m-l1,r2-1);
}
int main()
{
cin>>s1;
cin>>s2;
len=strlen(s1);
dfs(0,len-1,0,len-1);
}
前序遍历的规则:
(1)访问根节点
(2)前序遍历左子树
(3)前序遍历右子树
中序遍历的规则:
(1)中序遍历左子树
(2)访问根节点
(3)中序遍历右子树
后序遍历二叉树的规则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根节点