题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。
输入格式
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
1行,表示一棵二叉树的先序。
输入输出样例
输入 #1
BADC
BDCA
输出 #1
ABCD
程序代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
using namespace std;
char s1[15],s2[15];
void xianxu(int l1,int r1,int l2,int r2){//l1,r1分别表示后序序列的左右边界;l2,r2分别表示中序序列的左右边界
if(l1>r1 || l2>r2)//左边界>右边界,返回
return;
char ch=s2[r1];//后序序列的最后一个是根结点
cout << ch;
for(int i=l2;i<=r2;i++){//在中序序列中找到根的位置
if(s1[i]==ch){//找到后根结点的左边为左子树,右边为右子树
xianxu(l1,l1+i-1-l2,l2,i-1);//递归调用
xianxu(r1-r2+i,r1-1,i+1,r2);
break;
}
}
}
int main(){
cin >> s1 >> s2;
int len=strlen(s1);
xianxu(0,len-1,0,len-1);//初始两段序列左边界和右边界是一样的
return 0;
}