题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。 给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。

输入输出格式
输入描述:
两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C…最多26个结点。
输出描述:
输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。
输入输出样例
输入样例#:
复制
ABC
BAC
FDXEAG
XDEFAG
输出样例#:
复制
BCA
XEDGAF
思路:先序的第一个是根节点,而中序的根节点可划分左右子树,利用这个特点,每次递归的子树用先序的给出的第一个节点找中序的根节点作为子树的根节点。

#include<iostream>
#include<cstring>
using namespace std;
char pre[10000],in[5000];struct node{char data;struct node *lchild,*rchild;};
struct node *create(int ll,int lr,int rl,int rr){struct node *p= (node*)malloc(sizeof(node));p ->data = pre[ll]; //先序的第一个一定是根节点p ->lchild =NULL;  //不能省略,不然后面不能后序遍历p ->rchild = NULL;int pos;  //标志根节点的位置for(int i = rl;i <= rr;i++){  //找中序的根if(pre[ll] == in[i] ){pos = i;break;}}if(pos != rl){  //这里理解不了就记住p ->lchild = create(ll+1,ll + pos - rl,rl,pos - 1);}   //ll + 1 + pos - 1 - rl = ll + pos -rlif(pos != rr){p ->rchild = create(ll + pos -rl + 1,lr,pos + 1,rr);}return p;
}
void postorder(struct node *p){if(p != NULL){postorder(p ->lchild);postorder(p ->rchild);cout<<p ->data;}}int main(){while(cin>>pre>>in){int len =  strlen(pre);   struct node *p = NULL;p = create(0,len - 1,0,len - 1);   //传的先序和中序的范围postorder(p);cout<<endl;
}return 0;}

给定二叉树的先序遍历和中序遍历,求其后序遍历(先中定序)相关推荐

  1. matlab中for循环求n阶乘,在matlab中使用for循环求1到10阶乘的值

    源程序代码以及算法解释如下: matlab求1-10的阶乘的函数源码如下: function p = factorial() p=1; for a=1:10%设置要求的阶乘 for i=1:a%循环遍 ...

  2. python 中的列表中最大数怎么求_python 找出list中最大或者最小几个数的索引

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. 将变量区分_【统计学】区分定类、定序、定距、定比变量!

    从宏观角度分析,数据类型分为定性和定量两种.定性:变量是品质特征,如车的品牌,宝马,奔驰,只是为了区分. 定量:变量是数值,可以量化,如身高体重等.定量可以分为离散型和连续型. 离散型一般为计数结果, ...

  4. 如何给定二叉树的2个遍历序列(前序中序,中序后序),确定二叉树(方法详解)

    根据前序和中序遍历 给定二叉树 前序(根节点-左节点-右节点):A B D E H C F G 中序(左节点-根节点-右节点):D B E H A F C G 第一步:根据前序就可以判断遍历的第一个就 ...

  5. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...

  6. 本题要求按照先序遍历的顺序输出给定二叉树的叶结点。

    函数接口定义: void PreorderPrintLeaves( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typ ...

  7. 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树

    二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...

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

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

  9. 【数据结构笔记26】根据一棵树的先序/中序遍历Push与Pop内容,输出这棵树的先序、中序、后序遍历数组(不需要真的建立出树)

    本次笔记内容: 练习题-TTA.1 题意理解 练习题-TTA.2 核心算法 文章目录 题意理解 根据Push与Pop直接得出先序.中序数组 根据pre和in生成post C实现 题意理解 先来回忆非递 ...

最新文章

  1. Windows 10 周年更新后的 Edge 14 的 HierarchyRequestError 报错
  2. 微信jssdk批量添加卡券接口(踩坑经验)
  3. 帝国cms后台模板编辑器辅助增强插件代码高亮格式化显示
  4. 从零开始学python微课视频版-从零开始学Python(微课视频版)
  5. VTK修炼之道37:图像平滑_高斯滤波器
  6. Angular [(ngModel)]的ng-dirty设置时机
  7. Git 实用技巧记录,看这篇你就明白了!
  8. KeyMob移动广告聚合平台-致力于打造最牛的聚合平台
  9. magento2 checkout totals添加产品属性
  10. Swift - UIBezierPath
  11. 百度推出Apollo 3.5和Apollo Enterprise
  12. 中国古代亲属称谓家谱总览
  13. 嵌入式 Linux C 代码规范和风格
  14. 服务器删除的excel文件备份在哪里,excel自动备份文件在哪!如何找回EXCEL表格已删除的文件...
  15. DEDE源码分析与学习--index.php文件解读
  16. 可穿戴设备的发展前景
  17. JUC之striped64
  18. 戴尔微型计算机进bois,dell进bios按什么键 戴尔进bios的方法
  19. 无线降噪蓝牙耳机对比:NANK南卡和苹果AirPods Pro哪个好用?
  20. 【五、反向代理及其相关配置】

热门文章

  1. IOS 一些免费得接口
  2. 11.OpenWrt-uci命令接口
  3. SGI STL空间配置
  4. 点击按钮给网页换皮肤简单js实现
  5. Edittext限制输入字符长度,解决中英文混用情况保证规定长度
  6. 用minizip + ZLib 1.2.11 实现压缩文件解压
  7. 电视盒是计算机网络连接设备,网络机顶盒怎么连接WIFI 网络设置详细步骤
  8. Linux kernel分支管理与维护
  9. 计算机专业马来西亚,关于马来西亚大学里的计算机专业,你知道多少?
  10. 亚马逊kindle设置_使用亚马逊Kindle(和新的Kindle保护套)的一年