前序遍历、中序遍历和后续遍历
树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历)。
如图所示二叉树:
前序遍历:
前序遍历可以记为根左右,若二叉树为空,则结束返回。
前序遍历的规则:
(1)访问根节点
(2)前序遍历左子树
(3)前序遍历右子树
这里需要注意:在完成第2,3步的时候,也是要按照前序遍历二叉树的规则完成。
前序遍历的输出结果:ABDECF
中序遍历:
中序遍历可以记为左根右,也就是说在二叉树的遍历过程中,首先要遍历二叉树的左子树,接着遍历根节点,最后遍历右子树。
同样,在二叉树为空的时候,结束返回。
中序遍历的规则:
(1)中序遍历左子树
(2)访问根节点
(3)中序遍历右子树
注意:在完成第1,3步的时候,要按照中序遍历的规则来完成。
中序遍历的输出结果:DBEAFC
后序遍历:
后序遍历可以记为左右根,也就是说在二叉树的遍历过程中,首先按照后序遍历的规则遍历左子树,接着按照后序遍历的规则遍历右子树,最后访问根节点。
在二叉树为空的时候,结束返回。
后序遍历二叉树的规则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根节点
注意:在完成1,2步的时候,依然要按照后序遍历的规则来完成。
后序遍历的输出顺序:DEBFCA
————————————————————————————————————————————————————————————
例题:
已知前序、中序遍历,求后序遍历
前序遍历: DBAECHMZ
中序遍历:ABCEDMHZ
先根据前序遍历得到根结点为D。根据中序遍历就可以知道ABCE为左子树,MHZ为右子树。
再根据前序遍历,D之后就是BAEC为左子树,所以B是离根节点最近的一个左子树的根结点,B为ADCE左子树的根结点,
再根据前序遍历,D之后的HMZ为右子树, 所以H是离根结点最近的一个右子树的根结点,H为HMZ右子树的根结点,
所以: D
∧
B H
接下来截断为:
前序:BAEC
中序:ABCE
再根据前序遍历,左子树根结点为B,根据中序遍历就可以知道A为左子树,CE为右子树
再根据前序遍历,B之后就是A为左子树,没啥好分析了
再根据前序遍历,B之后就是EC为右子树,所以E是离根结点最近的一个右子树的根结点,E为EC右子树的根结点
所以: B
∧
A E
同理,再分析右子树,最后可得二叉树的结构为: D
∧
B H
∧ ∧
A E M Z
/
C
搞定! 一般先用前序遍历跟后序遍历分析出哪个是根结点,用中序遍历分析出左右子树!愉快的一晚!
前序遍历、中序遍历和后续遍历相关推荐
- 二叉树前序,中序求后续;中序,后续求前序
一, 1,知道前序,中序,求后续 前序:ABCDEFGHI 中序:BCAEDGHFI 由图可知后序为:CBIHGFEDA 2.知道中序,后续求前序 中序:BDCEAFHG 后序:DECBHGFA 由后 ...
- java 二叉树的实现以及前序、中序、后续遍历实现
目录 前言 完全二叉树 完全二叉树实现代码 测试 输出 前言 二叉树是n个有限元素的集合,该集合或者为空.或者由一个称为根(root)的元素及两个不相交的.被分别称为左子树和右子树的二叉树组成,是有序 ...
- 二叉树的前序、中序、后序遍历非递归实现
这是leetcode上的3个题目,要求用非递归实现,其中以后序遍历实现最难,既然递归实现的三种遍历程序只需要改变输入代码顺序,为什么循环不可以呢,带着这种执拗的想法,我开始了这次研究 我依然是将递归用 ...
- [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
[问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- 已知前序中序求层序 c语言递归,二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现...
# re: 二叉树的遍历:前序,中序输出有点问题,但是不知道到怎么修改,想请教各位大神 回复 更多评论 #include"stdio.h" #include"mall ...
- 如何判断二叉树的前序,中序,后序遍历
文章目录 前言 一.如何判断二叉树的前序,中序,后序遍历? 二.已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历? 三.程序实现 总结 前言 最近复习题中看到二叉树,对于它的前序,中序,后序遍历的 ...
- 数据结构笔记 —— 二叉树(前序、中序、后序遍历和查找)
本篇博客是根据b站尚硅谷的数据结构教程,学习后写的学习笔记,本篇博客的重点在自己编写的代码注释和过程分析上 https://www.bilibili.com/video/BV1E4411H73v?p= ...
- 二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码
自古逢秋悲寂寥,我言秋日胜春朝 二叉树结构说明 本博客使用树节点结构,如下所示: Kotlin 版本 class TreeNode(var value: String, var leftNode: T ...
- 刷题记录8---验证二叉搜索树+二叉树的层序遍历+从前序与中序遍历序列构造二叉树+二叉树展开为链表+二叉树的最近公共祖先
前言 所有题目均来自力扣题库中的hot 100,之所以要记录在这里,只是方便后续复习 98.验证二叉搜索树 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜 ...
- 用栈作为存储实现二叉树先序遍历 中序遍历 后续遍历
package com.example.ljia.Structure.tree;import lombok.Data;import java.util.Stack;/*** @ Author :Sam ...
最新文章
- 年薪50万的程序员_这些年薪50万+的程序员都经历了什么?
- 【leetcode 简单】第十一题 搜索插入位置
- scala教程之:可见性规则
- Mac,WIN下支撑 IPV6的 sftp客户端
- koa2 mysql 中间件_Koa2第二篇:中间件
- sliverlight 开发FAQ
- 【hive】怎么解决Hive中metaData 字符集中文问题?--详细步骤
- Druid数据库连接池配置
- C#实现用Enter键和Tab键同样功能
- Git提交空文件夹的技巧
- Analysis::checkBidir2Nx2N()
- ZZULIOJ1051-1055Python解法
- 百度地图,根据地址计算经度纬度
- 1044: 不及格率 C语言
- wps折线图如何画多条折线_如何用wps制作折线图
- 调用DialogFragment做进度条报java.lang.IllegalStateException: Fragment already added问题的最终解决方案
- 三、mongdb 查询
- 2021中国市场十大IT热点
- xampp mysql密码忘记_XAMPP重置MySQL密码
- java 微信模板_java开发微信模板消息推送
热门文章
- Mac Duet使用教程
- gm220s路由器怎么设置_中国移动GM220-S光猫修改为桥接模式并启用IPV6
- 医学图像分类 神经网络,神经网络图像识别技术
- 计算机汉字区位码十进制,[计 算 机]汉字区位码\国标码\机内码之间的换算
- 在Windows下搭建Vue开发环境
- 常见mysql优化 面试题
- mysql+hive+建表语句,在Oracle、MySQL中执行sql脚本生成hive建表语句
- html5动漫人物小部件制作,虚拟动漫人物制作器app
- 微信小程序的弹窗提示
- Java动态代理(dynamic proxy)