一、二叉树的遍历概念

  1. 二叉树的遍历是指从根结点触发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。

    (1). 前(先)序遍历

    前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子书。

    特点:①. 根----->左------->右
    ②. 根据前序遍历的结果可知第一个访问的必定是root结点。

    (2). 中序遍历

    中序遍历:若二叉树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后访问根结点,最后中序遍历右子树。

    特点:①. 左----->根------->右
    ②. 根据中序遍历的结果,再结合前序遍历的root结点去划分root结点的左右子树。

    (3). 后序遍历

    后序遍历:若二叉树为空,则空操作返回,否则从左到右先叶子结点后结点的方式遍历访问左右子树,最后访问根结点。

    特点:①. 左------>右------>根
    ②. 根据后序遍历的结果可知最后访问的必定是root结点。

    (4). 层序遍历

    层序遍历:若二叉树为空,则空返回,否则从树的第一层,即根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。

    特点:①. 从左到右,从上到下
    ②. 可知第一个访问的必定是root结点

  2. 例子。

假如有如下的二叉树:

根据上面的定义,得出如下的遍历结果

前序遍历:ABDHIEJCFKG

中序遍历:HDIBEJAFKCG

后序遍历:HIDJEBKFGCA

层序遍历:ABCDEFGHIJK

我个人根据二叉树图来求遍历结果的经验是:先根据定义,给出所有子树的相对位置,然后再整理。

二、根据遍历结果去推其他的遍历结果

相信这种情况下,考题的最多,一是考查如何递归倒推;二是节约试卷版面,画图也麻烦。

1.根据前序遍历、中序遍历,求后序遍历

例:
前序遍历: GDAFEMHZ
中序遍历: ADEFGHMZ
画树求法:
第一步,根据前序遍历的特点,我们知道根结点为G

第二步,观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。

第三步,观察左子树ADEF,左子树的中的根节点必然是大树的root的leftchild。在前序遍历中,大树的root的leftchild位于root之后,所以左子树的根节点为D。

第四步,同样的道理,root的右子树节点HMZ中的根节点也可以通过前序遍历求得。在前序遍历中,一定是先把root和root的所有左子树节点遍历完之后才会遍历右子树,并且遍历的左子树的第一个节点就是左子树的根节点。同理,遍历的右子树的第一个节点就是右子树的根节点。

第五步,观察发现,上面的过程是递归的。先找到当前树的根节点,然后划分为左子树,右子树,然后进入左子树重复上面的过程,然后进入右子树重复上面的过程。最后就可以还原一棵树了。

该步递归的过程可以简洁表达如下:

1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。
那么,我们可以画出这个二叉树的形状:

那么,根据后序的遍历规则,我们可以知道,后序遍历顺序为:AEFDHZMG
2. 已知中序和后序遍历,求前序遍历
依然是上面的题,这次我们只给出中序和后序遍历:
中序遍历: ADEFGHMZ
后序遍历: AEFDHZMG
画树求法:
第一步,根据后序遍历的特点,我们知道后序遍历最后一个结点即为根结点,即根结点为G。

第二步,观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。

第三步,观察左子树ADEF,左子树的中的根节点必然是大树的root的leftchild。在前序遍历中,大树的root的leftchild位于root之后,所以左子树的根节点为D。

第四步,同样的道理,root的右子树节点HMZ中的根节点也可以通过前序遍历求得。在前后序遍历中,一定是先把root和root的所有左子树节点遍历完之后才会遍历右子树,并且遍历的左子树的第一个节点就是左子树的根节点。同理,遍历的右子树的第一个节点就是右子树的根节点。

第五步,观察发现,上面的过程是递归的。先找到当前树的根节点,然后划分为左子树,右子树,然后进入左子树重复上面的过程,然后进入右子树重复上面的过程。最后就可以还原一棵树了。该步递归的过程可以简洁表达如下:
1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。
这样,我们就可以画出二叉树的形状,如上图所示,这里就不再赘述。

那么,前序遍历: GDAFEMHZ

大佬的原文链接:https://blog.csdn.net/android_cmos/article/details/52887028

数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历相关推荐

  1. 数据结构笔记 —— 二叉树(前序、中序、后序遍历和查找)

    本篇博客是根据b站尚硅谷的数据结构教程,学习后写的学习笔记,本篇博客的重点在自己编写的代码注释和过程分析上 https://www.bilibili.com/video/BV1E4411H73v?p= ...

  2. 数据结构 - 树(二叉树的 前序、中序、后序 遍历)

    二叉树遍历(前序中序后序,主要是看父节点的输出顺序) package tree;public class BinaryTreeDemo {public static void main(String[ ...

  3. 用Java描述数据结构之二叉树,前序遍历,中序遍历,后序遍历

    什么是二叉树? 一棵二叉树是节点的一个有限集合,该集合或者为空,或者是由一个节点加上两棵别称为左子树和右子树的二叉树组成. 根据二叉树的概念,可以知道二叉树有以下两个特点: 1.每个节点最多有两棵子树 ...

  4. 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    zsychanpin 博客园 首页 新随笔 联系 订阅 管理 树的基本概念和遍历规则 树的递归定义 树是n(n>0)个结点的有限集,这个集合满足下面条件:       ⑴有且仅有一个结点没有前驱 ...

  5. C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历)

    C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历) tips:前些天学习了C语言数据结构链表,栈,队列.今天来学习一下C语言数据结构之二叉树的各种操作. 注意:二叉树的层次建树是 ...

  6. C/C++编程笔记:数据结构二叉树的查找(前序、中序、后序、层序遍历)

    建立一棵含有n个结点的二叉树,采用二叉链表存储: 输出前序.中序.后序..层序遍历该二叉树的遍历结果. 定义二叉树的数据类型--二叉树结点结构体BiNode.建立二叉链表可以采用扩展二叉树的一个遍历序 ...

  7. 【数据结构】理解二叉树的三种遍历--前序、中序、后序 +层序(简明易懂)

    一.易懂的形象理解 其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序.中序. ...

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

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

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

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

最新文章

  1. python snap7 plc db_python snap7讀寫s7-1200PLC的數據(PLC的I、Q、M區)
  2. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 函数形参设置 | 确保打开文件成功 | 统计文件大小 )
  3. UVa 11388 - GCD LCM
  4. hdu5909-Tree Cutting【FWT】
  5. 借助钉钉宜搭,奶茶店开始用黑科技管理门店了
  6. mysql单实例多数据库_MySQL单台服务器跑多个实例子详解
  7. Android中GsonFormat的安装及使用
  8. jsp乱码介绍(续)
  9. Lattice - 规划模块 1.采样轨迹 2.计算轨迹cost 3 循环检测筛选轨迹
  10. 火山编程开发平台pc版|火山软件开发平台下载 附使用教程
  11. Office Visio 2007 简体中文版资源下载及安装教程
  12. 智能合约安全漏洞检测技术研究综述——常见漏洞简述
  13. 「冰狐智能辅助」如何在线实时调试?
  14. 云南原乡|坐拥腾冲旅游绝佳位置 是旅居养生度假投资首选
  15. Num.01- java 之 mybatis 框架
  16. DDN区块链受邀为南京2020年区块链技术与应用师资培训班提供实训
  17. 多元矩阵乘积的导数问题
  18. 2012年下半年软件评测师上午试题
  19. Linux下YVU420转MP4工具下载,yuv420p转jpg linux(纯C语言实现)
  20. odoo13 订单模板设置_Odoo + Anodoo功能介绍13-SaaS公司如何定义在线销售的订阅产品...

热门文章

  1. html css动画自动旋转,使用CSS3 backface-visibility属性制作翻转动画效果
  2. 微信视频公开课第一讲
  3. 【day26】w10联想输入法不显示候选字怎么办
  4. 清华教授彭凯平:成年人的崩溃,就在一瞬间
  5. python response重头开始_用 Python 修改支付宝运动步数,轻松 TOP1
  6. 碾转相除法求最大公约数
  7. 团队激励与沟通思维导图
  8. GCC编译优化应用预编译头
  9. 2.11 Nginx控制浏览器缓存
  10. 如何有效利用大数据?