既然是树,还是用根来描述更为贴切,先把根遍历出来,再遍历左右子树,就是先根遍历;后根遍历就是先把左右子树遍历出来,再把根遍历出来;只要牢记一点,不论怎么遍历,规则同样要作用于子树。


比如上图,先根遍历为:5 3 (2 4) 6(8 7 9),括号里相当于对非叶子节点再进行一次先根遍历;后根遍历为:(2 4) 3 [ (7 9) 8] 6 5;

那么问题来了,只看结果的话,如何根据先根和后根,求出中根遍历。
先根:5 3 2 4 6 8 7 9
后根:2 4 3 7 9 8 6 5

特点1:先根遍历,第一个节点肯定是根,后根遍历最后一个节点肯定是根

所以节点5就是整棵树的根了

特点2:先根节点后面紧邻的肯定是左子树节点,后根节点前面紧邻的肯定是右子树节点(存在只有左子树或只有右子树的情况)。

所以节点3是根节点5的左子树,节点6是根节点5的右子树,所以中根遍历为:3 5 6。同理再分别看下关于节点3和节点6:

节点3先根遍历3 2 4,后根遍历2 4 3,所以3就是根节点了,2和4分别是节点3的左右子树,所以中根遍历为 2 3 4。同理,节点6先根遍历为
6 8 7 9,后根遍历为7 9 8 6,所以8肯定是6的子树节点,再看8 7 9和 7 9 8,显然7和9是8的左右子树,所以节点6的中根遍历为:7 8 9 6或 6 7 8 9。

最后得出中根遍历结果为:(2 3 4) 5 (7 8 9) 6,或者 (2 3 4) 5 6 (7 8 9)。

二叉树根据前序遍历和后序遍历,求解中序遍历相关推荐

  1. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  2. 二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)

    文章目录 二叉树的层序遍历 前序遍历 递归版本 非递归版本 中序遍历 递归版本 非递归版本 后序遍历 递归版本 非递归版本 二叉树的层序遍历 void printTree(BinaryTree* ar ...

  3. (2)二叉树由后序(LRD)和中序(LDR)得到前序(DLR)

    二叉树由后序(LRD)和中序(LDR)得到前序(DLR) 具体代码 /* DCBHKGFEA 后序 BDCAEHGkF 中序 ABCDEFGHK 前序思路:根据后序找根节点->分割中序-> ...

  4. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)

    7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...

  5. 根据先序序列和中序,后序和中序序列创建二叉树

    思考:如何才能确定一棵树? 结论:    通过中序遍历和先序遍历可以确定一个树                 通过中序遍历和后续遍历可以确定一个树 通过先序遍历和后序遍历确定不了一个树. 算法实现: ...

  6. 先序序列和中序序列构造二叉树,中序序列和后序序列构造二叉树

    1:首先读者要了解二叉树BinaryTree基本概念,其次区分左子树与左孩子节点,右子树与右孩子节点.(在数据结构中      一个节点可以成为一棵树,对于没有孩子节点的节点称为为叶子节点). 2:在 ...

  7. 理解——先序遍历是入栈过程,中序遍历是出栈过程

    遇到这样一道题:先序序列为a,b,c,d的不同二叉树的个数是多少? 拿到这个问题 首先,要了解到先序遍历和中序遍历都是需要用到栈,其中,先序遍历是入栈过程,中序遍历是出栈过程 然后,二叉树的先序序列和 ...

  8. 线索树找*p的中序后继且中序遍历 二叉线索树

    //线索树找*p的中序后继且中序遍历 二叉线索树 #define thread 1 #define link 0 typedef struct Bt{char data;struct Bt *lc;/ ...

  9. 【例题】已知二叉树的先序序列和中序序列构造二叉树

    做下列例题之前请先转到:[教程]了解原理和方法.然后再做下面的例题. [例题1]一棵二叉树的先序遍历序列为EFHIGJK,中序遍历序列为HFIEJKG,则该二叉树根结点的右孩子为() A. H B. ...

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

    已知前序(先序)与中序输出后序: 前序:1, 2, 3, 4, 5, 6(根左右) 中序:3, 2, 4, 1, 6, 5(左根右) 分析:因为前序(根左右)最先出现的总是根结点,所以令root为前序 ...

最新文章

  1. Python的GIL是什么鬼,多线程性能究竟如何
  2. onresize事件会被多次触发_玩转SpringBoot之通过事件机制参与SpringBoot应用的启动过程...
  3. 哎!马上要涉水了,装修的水!
  4. cmd 调试java_JAVA学习笔记(初级)--CMD调试
  5. Java黑皮书课后题第1章:1.4(打印表格)编写程序,显示以下表格
  6. R语言空间数据处理(part1)--基础数据操作与处理
  7. angular2页面抓取_angular2怎么获取目前高度?
  8. SQL - waitfor delay/time(SQL中延迟时间的方法)
  9. Qt + GDAL 写入矢量图层 shp
  10. URLDecoder/URLEncoder使用场景
  11. 软件工程和数据库中必考的ER图
  12. 教你用300行Python代码实现一个人脸识别系统
  13. Python抽象基类、鸭子类型介绍
  14. 第一课:两种方法教你如何注册小程序账号
  15. 数据、运营相关试题(二)【牛客网:京东2019春招产品运营类试卷】
  16. ROM(只读存储器)
  17. 为什么使用计算机网络连接,为什么无线网络连接上却不能上网,教您电脑连上无线网却不能上网怎么办...
  18. 机器视觉硬件——工业相机
  19. ArcMap常用1:地理配准(一张地图图片和gis地图的匹配)
  20. 如何修改Linux服务器时间

热门文章

  1. 支付宝签名与验签,return_url和通知页notify_url
  2. 用计算机附件怎么算十进制,计算机附件中的计算器使用方法
  3. 服务器开机后显示省电模式,关于G9008V升级6.0.1后“省电模式”的一点儿体会
  4. hadoop组成及其架构
  5. 强贴,搜集的搞笑小短句!
  6. ParserError: Error tokenizing data
  7. 计算机网络技术的能力,【技术专业论文】计算机网络技术专业能力达成测评体系(共2583字)...
  8. IDEA、AndroidStudio写代码辅助插件
  9. SublimeText 配置跳转回上个光标坐标
  10. 常用的JS页面跳转代码调用大全