二叉树遍历(flist)

题目描述

树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。
假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。

输入

输入文件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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值