题目描述
树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。
假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。
输入
输入文件flist.in共两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。
输出
输出文件flist.out就一行,表示二叉树的先序序列。
样例输入
DBEAC
ABCDE
样例输出
ABDEC
Cake 1#
#include<cstdio>
#include<cstring>
int map[255];
char s1[255],s2[255];
int l;
void make_tree(int l,int r)
{
if(l>r) return;
int k=0x7fffff,where;
for(int i=l;i<=r;i++)
{
if(map[s1[i]]<k)
{
k=map[s1[i]];
where=i;
}
}
putchar(s1[where]);
make_tree(l,where-1);
make_tree(where+1,r);
}
int main(void)
{
gets(s1);
gets(s2);
l=strlen(s1);
for(int i=0;i<l;i++)
map[s2[i]]=i;
make_tree(0,l-1);
putchar('\n');
return 0;
}
Cake 2#
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
string a,b;
int n,e1,e2;
void zhix(int g,int z,int y)
{
int t;
//t=b.find(a[g]);
for(int i=1;i<=e2;i++)
if(b[i]==a[g])
{
t=i;
break;
}
printf("%c",a[g]);
if(t>=z)
if(g*2<=e1)
zhix(g*2,z,t-1);
if(t<=y)
if(g*2+1<=e1)
zhix(min(e1,g*2+1),t+1,y);
}
int main()
{
cin>>b>>a;
e1=a.size();
e2=b.size();
for(int i=e1;i>=1;i--)
a[i]=a[i-1];
for(int i=e2;i>=1;i--)
b[i]=b[i-1];
zhix(1,1,e2);
return 0;
}