问题描述:给出一棵二叉树的中序与后序排列。求出它的先序排列。 (约定树结点用不同的大写字母
表示,长度<=8) 。
输入格式:两行,每行一个字符串,分别表示中序和后序排列
输出格式:一个字符串,表示所求先序排列
样例输入
BADC
BDCA
样例输出
表示,长度<=8) 。
输入格式:两行,每行一个字符串,分别表示中序和后序排列
输出格式:一个字符串,表示所求先序排列
样例输入
BADC
BDCA
样例输出
ABCD
//******************求后序遍历与后序遍历
#include <iostream>
#include <string.h>
using namespace std;
char pre[50],in[50],post[50];
void postorder(int pre_i,int in_i,int in_j)//求后序遍历
{
if(in_i>in_j) return ;
else
{
int i;
for(i=in_i;i<=in_j;i++)
if(pre[pre_i]==in[i])
break;
postorder(pre_i+1,in_i,i-1);
postorder(pre_i+i-in_i+1,i+1,in_j);
cout << pre[pre_i];
}
}
void preorder(int in_i,int in_j,int post_j)//求先序遍历
{
if(in_i>in_j) return ;
else
{
cout << post[post_j];
int i;
for(i=in_i;i<=in_j;i++)
if(post[post_j]==in[i])
break;
preorder(in_i,i-1,post_j-(in_j-i)-1);
preorder(i+1,in_j,post_j-1);
}
}
int main()
{
gets(pre); gets(in);
postorder(0,0,strlen(in)-1);//求后序遍历
gets(in); gets(post);
preorder(0,strlen(in)-1,strlen(post)-1);//求先序遍历
return 0;
}