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

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

  1. 已知二叉树的后序序列和中序序列,求先序序列。

    后续遍历=左子树,右子树,根,中序遍历=左子树,根,右子树 已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是? 由后序遍历序列是DBCEFGHA,可以看出整 ...

  2. 二叉树的先序、中序、后序遍历序列

    二叉树的遍历主要有三种: (1)先(根)序遍历(根左右) (2)中(根)序遍历(左根右) (3)后(根)序遍历(左右根) 举个例子: 先(根)序遍历(根左右):A B D H E I C F J K ...

  3. 数据结构----二叉树已知先序和中序遍历序列求后序遍历

    说明 通过先序和中序或者中序和后序我们可以还原出原始二叉树,但是通过先序和后序是无法还原出原始二叉树也即是说,只有通过先序和中序,或者中序和后序我们才可以唯一的确定一个二叉树. 例子一 已知先序和中序 ...

  4. PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列

    PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列 题目 输入格式 输出格式 输入样例 输出样例 代码 题目 已知二叉树层序+中序序列,求后序遍历序列. 输入格式 第一行给出该二叉树的节 ...

  5. 二叉树:已知先序和中序求后序,已知中序和后序求先序

    树的三种遍历方式的遍历顺序: 先序遍历:根.左子树.右子树(特点:第一个元素为根) 中序遍历:左子树.根.右子树(特点:根的两边分别为左子树和右子树) 后序遍历:左子树.右子树.根(特点:最后一个元素 ...

  6. 已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是

    已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是: ----C ---/ --E -/-\ D---B -----\ ------A 我知道答案思念是这个....我想 ...

  7. 【C++】已知二叉树先序遍历+中序遍历 求后序遍历

    题目:已知二叉树先序遍历+中序遍历 求后序遍历 对于一棵二叉树,给定其先序遍历的结果序列和中序遍历的结果序列,请写出其后序遍历的结果序列. 输入样例: GDAFEMHZ(先序遍历的结果序列) ADEF ...

  8. C++实现已知二叉树前序遍历和中序遍历,求后序遍历

    C++实现已知二叉树前序遍历和中序遍历,求后序遍历 一.基本概念 1.先序遍历(NLR)可以确定二叉树的父子结点: 2.中序遍历(LNR)可以确定二叉树的左右子树: 3.后序遍历(LRN)可以确定二叉 ...

  9. 已知后序与中序输出前序(先序)

    已知后序与中序输出前序(先序): 后序:3, 4, 2, 6, 5, 1(左右根) 中序:3, 2, 4, 1, 6, 5(左根右) 分析:因为后序的最后一个总是根结点,令i在中序中找到该根结点,则i ...

  10. 已知先序和中序序列求二叉树

    已知二叉树的先序和中序序列,构造出相应的二叉树 先序:ABCDEFGHlJ 中序:CDBFEAIHGJ 1.由先序求出A为二叉树的根 2.在中序遍历中找到A的位置,则CDBFE为它的左子树,IHGJ为 ...

最新文章

  1. 算法导论读书笔记-第十九章-斐波那契堆
  2. java 反序列化工具 marshalsec改造 加入dubbo-hessian2 exploit
  3. 一个mui+ajax+php的demo
  4. 品优购dubbox文档bug连环计,还是自己敲最实在!!!!!!
  5. Sim300设计手册(转)
  6. C#关于电脑DPI改动显示的问题
  7. golang 数组 最后一个_Golang 速览
  8. excel vba 如何将日期周几转换成文字_这5个超实用的Excel技巧,让你的办公效率更高...
  9. JavaScript--函数
  10. get和post混合提交
  11. githug-54-git练习
  12. mysql upsert语法_mysql – SQL标准UPSERT调用
  13. C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字
  14. win8 不显示计算机,Win8电脑插上U盘不显示盘符怎么办?
  15. Monte Carlo Tree Search (MCTS) 蒙特·卡罗尔树搜索
  16. 学习用HTML做新闻摘要
  17. 机器学习和深度学习资料汇总【02】
  18. 7-1 计算平均成绩 (15分)
  19. 算法 洗扑克牌(乱数排列)
  20. numpy.array和python列表的转换

热门文章

  1. 求1+2!+3!+...+20!的和。
  2. Asp.net Boilerplate之AbpSession扩展
  3. Android的ADT的安装
  4. XP访问windows 2003终端服务显示到期的解决
  5. spring AOP 切在方法上可以改变方法的返回值
  6. 【svn】Centos搭建svn服务器环境
  7. 验证DG最大性能模式下使用ARCH/LGWR及STANDBY LOG的不同情况
  8. 半平面交总结and模板
  9. Android 资源(resource)学习小结
  10. Wheel ProgressBar 实现之三——模拟进度过程