已知二叉树的后序和中序遍历结果 求前序结果

 

Description

题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。

Input

输入有多组数据(少于100组),以文件结尾结束。
每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。

Output

每组输出数据单独占一行,输出对应得先序序列。

Sample Input

ACBFGED ABCDEFG
CDAB CBAD

Sample Output

DBACEGF
BCAD

递归思路:

从后序序列中找根节点,找到后,遍历中序序列,以根节点为界将其分为左子树和右子树

打印根节点

递归左子树

递归右子树

实现步骤:

1.后序存入字符串数组a 中序存入字符串数组b

2.递归函数需要接收三个变量(1)根节点在a中的位置(2)b中所操作的部分的起始位置和结束位置

void recovery(int root,int start,int end)

3.进入函数后,遍历b,找到根节点位置,用i储存位置

4.打印根节点

5.递归左子树

ps:这里注意,此时递归要传的start和end和root是针对左子树ABC来说的

所以,root=toot-(end-i)-1;  start不变; end=i-1;

6.递归右子树

同样的 针对EFG   root=root-1; start=i+1;end不变;

注意:当end==start时,当前节点已经是叶子节点了,所以,start>end时,是递归结束条件。

代码:

#include<stdio.h>
#include<string.h>
void recovery(int root,int start,int end);
char a[1000];
char b[1000];
int main()
{
	while(scanf("%s",a)==1)
	{
		scanf("%s",b);
		int l=strlen(a);
		recovery(l-1,0,l-1);
		printf("\n");
	}
}
void recovery(int root,int start,int end)
{
	if(start>end)
	return ;
	int i=start;//i用来遍历 
	while(i<end&&b[i]!=a[root])//遍历b 找到根节点  
	i++;
	printf("%c",a[root]);//打印根节点 
	recovery(root-(end-i)-1,start,i-1);//遍历左子树 
	recovery(root-1,i+1,end);//遍历右子树 
}

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1900_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值