已知二叉树的后序和中序遍历结果 求前序结果
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);//遍历右子树
}
已知二叉树的后序和中序遍历结果 求前序结果相关推荐
- 已知二叉树的后序序列和中序序列,求先序序列。
后续遍历=左子树,右子树,根,中序遍历=左子树,根,右子树 已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是? 由后序遍历序列是DBCEFGHA,可以看出整 ...
- 二叉树的先序、中序、后序遍历序列
二叉树的遍历主要有三种: (1)先(根)序遍历(根左右) (2)中(根)序遍历(左根右) (3)后(根)序遍历(左右根) 举个例子: 先(根)序遍历(根左右):A B D H E I C F J K ...
- 数据结构----二叉树已知先序和中序遍历序列求后序遍历
说明 通过先序和中序或者中序和后序我们可以还原出原始二叉树,但是通过先序和后序是无法还原出原始二叉树也即是说,只有通过先序和中序,或者中序和后序我们才可以唯一的确定一个二叉树. 例子一 已知先序和中序 ...
- PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列
PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列 题目 输入格式 输出格式 输入样例 输出样例 代码 题目 已知二叉树层序+中序序列,求后序遍历序列. 输入格式 第一行给出该二叉树的节 ...
- 二叉树:已知先序和中序求后序,已知中序和后序求先序
树的三种遍历方式的遍历顺序: 先序遍历:根.左子树.右子树(特点:第一个元素为根) 中序遍历:左子树.根.右子树(特点:根的两边分别为左子树和右子树) 后序遍历:左子树.右子树.根(特点:最后一个元素 ...
- 已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是
已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是: ----C ---/ --E -/-\ D---B -----\ ------A 我知道答案思念是这个....我想 ...
- 【C++】已知二叉树先序遍历+中序遍历 求后序遍历
题目:已知二叉树先序遍历+中序遍历 求后序遍历 对于一棵二叉树,给定其先序遍历的结果序列和中序遍历的结果序列,请写出其后序遍历的结果序列. 输入样例: GDAFEMHZ(先序遍历的结果序列) ADEF ...
- C++实现已知二叉树前序遍历和中序遍历,求后序遍历
C++实现已知二叉树前序遍历和中序遍历,求后序遍历 一.基本概念 1.先序遍历(NLR)可以确定二叉树的父子结点: 2.中序遍历(LNR)可以确定二叉树的左右子树: 3.后序遍历(LRN)可以确定二叉 ...
- 已知后序与中序输出前序(先序)
已知后序与中序输出前序(先序): 后序:3, 4, 2, 6, 5, 1(左右根) 中序:3, 2, 4, 1, 6, 5(左根右) 分析:因为后序的最后一个总是根结点,令i在中序中找到该根结点,则i ...
- 已知先序和中序序列求二叉树
已知二叉树的先序和中序序列,构造出相应的二叉树 先序:ABCDEFGHlJ 中序:CDBFEAIHGJ 1.由先序求出A为二叉树的根 2.在中序遍历中找到A的位置,则CDBFE为它的左子树,IHGJ为 ...
最新文章
- 算法导论读书笔记-第十九章-斐波那契堆
- java 反序列化工具 marshalsec改造 加入dubbo-hessian2 exploit
- 一个mui+ajax+php的demo
- 品优购dubbox文档bug连环计,还是自己敲最实在!!!!!!
- Sim300设计手册(转)
- C#关于电脑DPI改动显示的问题
- golang 数组 最后一个_Golang 速览
- excel vba 如何将日期周几转换成文字_这5个超实用的Excel技巧,让你的办公效率更高...
- JavaScript--函数
- get和post混合提交
- githug-54-git练习
- mysql upsert语法_mysql – SQL标准UPSERT调用
- C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字
- win8 不显示计算机,Win8电脑插上U盘不显示盘符怎么办?
- Monte Carlo Tree Search (MCTS) 蒙特·卡罗尔树搜索
- 学习用HTML做新闻摘要
- 机器学习和深度学习资料汇总【02】
- 7-1 计算平均成绩 (15分)
- 算法 洗扑克牌(乱数排列)
- numpy.array和python列表的转换
热门文章
- 求1+2!+3!+...+20!的和。
- Asp.net Boilerplate之AbpSession扩展
- Android的ADT的安装
- XP访问windows 2003终端服务显示到期的解决
- spring AOP 切在方法上可以改变方法的返回值
- 【svn】Centos搭建svn服务器环境
- 验证DG最大性能模式下使用ARCH/LGWR及STANDBY LOG的不同情况
- 半平面交总结and模板
- Android 资源(resource)学习小结
- Wheel ProgressBar 实现之三——模拟进度过程