【题目描述】
树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。
假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。
【输入】
两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。
【输出】
一行,表示二叉树的先序序列。
【输入样例】
DBEAC
ABCDE
【输出样例】
ABDEC
【算法分析】:树本身可以看做是递归定义的,求先序遍历只要找出树的根,递归找到左子树的根,右子树的根,输出根即可。本题中各结点都不相同,而同一层中左子树的树根一定先于右子树遍历到,
因此,可以据分层遍历找到根结点,由根结点和中序遍历把原树分成左右子树,设置左右子树范围,再用分层遍历结果找子树的根。特点说明,由于树各结点都不同,所以分层遍历的结果可以不用修改
直接与子树对比查找子树的根。
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
string s1,s2;
void houx(int,int,int,int);
int main()
{
cin>>s1>>s2;
houx(0,s1.length()-1,0,s2.length()-1);
cout<<endl;
return 0;
}
void houx(in