前序遍历、中序遍历、后序遍历
遍历是针对根节点的
前序遍历顺序:根节点--左子树--右子树
中序遍历顺序:左子树--根节点--右子树
后序遍历顺序:左子树--右子树--根节点
深入一点去理解这个排序顺序是这样的
前序遍历首先访问根结点,然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。
后序遍历首先遍历左子树,然后遍历右子树,最后访问根节点。在遍历左、右子树时,仍然先遍历左子树,再遍历右子树,最后访问根结点。
也就是说我们在遍历的时候必然是一层一层去寻找,并且不断递归。
说明
已知前序遍历与中序遍历,可确定唯一二叉树;
已知中序遍历与后序遍历,可确定唯一二叉树;
但是已知前序遍历与后序遍历,无法确定唯一二叉树。
举个例子来看懂树的排序
如果我们已知中序遍历是DBEAFC,前序遍历是ABDECF,求后序遍历。
解:
- 根据前序遍历ABDECF,A肯定是根节点(第一个遍历根节点)。对照中序遍历,就能知道DBE是左子树,FC是右子树。
- 左子树:中序DBE,前序是BDE;说明B是左子树的根节点,D是B的左孩子,E是右孩子。
- 右子树类似:C是右子树的根节点,F是C的左孩子(因为中序遍历中F是在C前面的,所以一定是左孩子;如果F在C的后面,就是右孩子)
- 后序遍历DEBFCA
所以我们已知树去写三种不同的遍历的时候,就是不断的把树拆分成左子树,根节点,右子树,一级一级的拆分下去。最终获得最小的二叉树,可以轻易的写出来顺序。
或者我们已知两种遍历结果(前提是可以唯一确定二叉树),我们根据前序遍历或者后续遍历可以立即得到根节点是什么,根据根节点将中序遍历拆分,立即获得左子树与右子树内容。在一级一级的拆分下去。可获得完整的二叉树结构。
算法程序:
https://blog.csdn.net/Su_coding/article/details/70196173
前序遍历、中序遍历、后序遍历相关推荐
- 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...
二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...
- 二十五、二叉树的前序、中序、后序遍历
一.为何使用树这种数据结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较 ...
- 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...
- 把一个数组的值存入二叉树中,然后利用前序、中序、后序3种方式进行遍历(完整代码以及运行结果)(Java)
把一个数组的值存入二叉树中,然后利用前序.中序.后序3种方式进行遍历(完整代码以及运行结果) 在最近的面试过程中,听说有小伙伴被面试官要求创建二叉树,然后对该二叉树进行遍历,感觉这一直以来都是一个大家 ...
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- 二叉树的前序、中序和后序遍历介绍及案例
文章目录 一.介绍 二.建立二叉树 1.节点类 2.二叉树 三.前序遍历 四.中序遍历 五.后序遍历 六.完整代码 一.介绍 前序遍历.中序遍历和后序遍历是二叉树的三种遍历方式,三者很像,具体的遍历步 ...
- 树节点的遍历,查找,删除(前序,中序,后序)
二叉树模板类: class BinaryTree {private Node root;public void setRoot(Node root) {this.root = root;}//删除结点 ...
- 二叉树前序、中序、后序遍历求法
二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...
- PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...
http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...
最新文章
- Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理
- 实时计算 Flink 版总体介绍
- Redis 缓存常见问题:缓存一致性的解决方案
- icp光谱仪的工作原理_ICP2060T ICP光谱仪
- ux和ui_从UI切换到UX设计
- 在运行时交换出Spring Bean配置
- redis中不同value类型的存取操作方式
- C#基础知识整理:基础知识(11) 值类型,引用类型
- linux的鼠标右键老是建立文件夹,右键新建只有文件夹怎么办|右键只能新建文件夹解决方法-系统城...
- 数字地球各类贴图资源下载地址
- VScode安装离线插件
- Win10(Win7)局域网设置共享文件夹,超全面步骤。
- 一文了解复旦大学NLP实验室的14篇EMNLP 2022长文内容
- 数据结构(python语言描述)课后题答案_数据结构课后习题及答案
- 生命中最重要的两个日子,一个是你出生,一个是你发现自己为什么而生
- 墨水屏(电子纸)刷新模式
- 【高级数理统计R语言学习】5 协方差分析
- latex数学符号加粗_LaTeX技巧458:关于LaTeX数学字体加粗
- jenkin swindows启动_windows本地安装以及使用Jenkins
- 如何提高友盟推送的消息到达率
热门文章
- .Net 中使用Farpoint Web Spread 自定义CellType
- python爬虫--第一个爬虫程序
- 按键精灵9.5.1.11790秒速启动,多余元素全灭版
- MySQL百万级压测数据表
- 决策模型(二):风险决策法
- html手机陀螺仪,手机中的陀螺仪竟然也不值得信任
- matlab做胶州湾地图,青岛胶州湾跨海大桥为什么建在胶州湾最宽的地方?
- 对数组名取地址与数组名
- hive 启动报错java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%..
- C语言,库函数中qsort的用法,及解释