遍历是针对根节点的

前序遍历顺序:根节点--左子树--右子树

中序遍历顺序:左子树--根节点--右子树

后序遍历顺序:左子树--右子树--根节点

深入一点去理解这个排序顺序是这样的

前序遍历首先访问根结点,然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。

后序遍历首先遍历左子树,然后遍历右子树,最后访问根节点。在遍历左、右子树时,仍然先遍历左子树,再遍历右子树,最后访问根结点。

也就是说我们在遍历的时候必然是一层一层去寻找,并且不断递归。

说明

已知前序遍历与中序遍历,可确定唯一二叉树;

已知中序遍历与后序遍历,可确定唯一二叉树;

但是已知前序遍历与后序遍历,无法确定唯一二叉树。

举个例子来看懂树的排序

如果我们已知中序遍历是DBEAFC,前序遍历是ABDECF,求后序遍历。

解:

  1. 根据前序遍历ABDECF,A肯定是根节点(第一个遍历根节点)。对照中序遍历,就能知道DBE是左子树,FC是右子树。
  2. 左子树:中序DBE,前序是BDE;说明B是左子树的根节点,D是B的左孩子,E是右孩子。
  3. 右子树类似:C是右子树的根节点,F是C的左孩子(因为中序遍历中F是在C前面的,所以一定是左孩子;如果F在C的后面,就是右孩子)
  4. 后序遍历DEBFCA

所以我们已知树去写三种不同的遍历的时候,就是不断的把树拆分成左子树,根节点,右子树,一级一级的拆分下去。最终获得最小的二叉树,可以轻易的写出来顺序。

或者我们已知两种遍历结果(前提是可以唯一确定二叉树),我们根据前序遍历或者后续遍历可以立即得到根节点是什么,根据根节点将中序遍历拆分,立即获得左子树与右子树内容。在一级一级的拆分下去。可获得完整的二叉树结构。

算法程序:

https://blog.csdn.net/Su_coding/article/details/70196173

前序遍历、中序遍历、后序遍历相关推荐

  1. 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...

    二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...

  2. 二十五、二叉树的前序、中序、后序遍历

    一.为何使用树这种数据结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较 ...

  3. 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)

    手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...

  4. 把一个数组的值存入二叉树中,然后利用前序、中序、后序3种方式进行遍历(完整代码以及运行结果)(Java)

    把一个数组的值存入二叉树中,然后利用前序.中序.后序3种方式进行遍历(完整代码以及运行结果) 在最近的面试过程中,听说有小伙伴被面试官要求创建二叉树,然后对该二叉树进行遍历,感觉这一直以来都是一个大家 ...

  5. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  6. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  7. 二叉树的前序、中序和后序遍历介绍及案例

    文章目录 一.介绍 二.建立二叉树 1.节点类 2.二叉树 三.前序遍历 四.中序遍历 五.后序遍历 六.完整代码 一.介绍 前序遍历.中序遍历和后序遍历是二叉树的三种遍历方式,三者很像,具体的遍历步 ...

  8. 树节点的遍历,查找,删除(前序,中序,后序)

    二叉树模板类: class BinaryTree {private Node root;public void setRoot(Node root) {this.root = root;}//删除结点 ...

  9. 二叉树前序、中序、后序遍历求法

    二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...

  10. PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...

    http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...

最新文章

  1. Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理
  2. 实时计算 Flink 版总体介绍
  3. Redis 缓存常见问题:缓存一致性的解决方案
  4. icp光谱仪的工作原理_ICP2060T ICP光谱仪
  5. ux和ui_从UI切换到UX设计
  6. 在运行时交换出Spring Bean配置
  7. redis中不同value类型的存取操作方式
  8. C#基础知识整理:基础知识(11) 值类型,引用类型
  9. linux的鼠标右键老是建立文件夹,右键新建只有文件夹怎么办|右键只能新建文件夹解决方法-系统城...
  10. 数字地球各类贴图资源下载地址
  11. VScode安装离线插件
  12. Win10(Win7)局域网设置共享文件夹,超全面步骤。
  13. 一文了解复旦大学NLP实验室的14篇EMNLP 2022长文内容
  14. 数据结构(python语言描述)课后题答案_数据结构课后习题及答案
  15. 生命中最重要的两个日子,一个是你出生,一个是你发现自己为什么而生
  16. 墨水屏(电子纸)刷新模式
  17. 【高级数理统计R语言学习】5 协方差分析
  18. latex数学符号加粗_LaTeX技巧458:关于LaTeX数学字体加粗
  19. jenkin swindows启动_windows本地安装以及使用Jenkins
  20. 如何提高友盟推送的消息到达率

热门文章

  1. .Net 中使用Farpoint Web Spread 自定义CellType
  2. python爬虫--第一个爬虫程序
  3. 按键精灵9.5.1.11790秒速启动,多余元素全灭版
  4. MySQL百万级压测数据表
  5. 决策模型(二):风险决策法
  6. html手机陀螺仪,手机中的陀螺仪竟然也不值得信任
  7. matlab做胶州湾地图,青岛胶州湾跨海大桥为什么建在胶州湾最宽的地方?
  8. 对数组名取地址与数组名
  9. hive 启动报错java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%..
  10. C语言,库函数中qsort的用法,及解释