失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 已知二叉树的后序和中序遍历结果 求前序结果

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

时间:2021-01-06 13:22:10

相关推荐

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

Description

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

Input

输入有多组数据(少于100组),以文件结尾结束。

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

Output

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

Sample Input

ACBFGED ABCDEFGCDAB CBAD

Sample Output

DBACEGFBCAD

递归思路:

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

打印根节点

递归左子树

递归右子树

实现步骤:

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);//遍历右子树 }

如果觉得《已知二叉树的后序和中序遍历结果 求前序结果》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。