首先说明,这只是我个人的一些理解与体会,我写下来是想让自己能随时随地复习与思考,并不是说想去教人家,所以其中可能会有些我个人理解不对的地方,这也正是我写博客的原因,这样才能不断进步,当然如果对读者有用的话,一起共勉。

 

今天我想记的是二叉树的遍历(先中后三种)。

我们都知道二叉树的遍历有四种,分别是先序遍历(也叫前序遍历),中序遍历,后序遍历以及层序遍历,在这里我不讲层序遍历(层序遍历是分别都从从每一层的左边向右边遍历)。以下的图是我自己画的,将就点看就行。

                    

 

   

我们都知道二叉树分为根节点,左孩子,右孩子三部分,所以所谓先序中序后序遍历,其实也就是访问根节点的顺序,首先,先序遍历,即为访问根节点->访问左孩子->访问右孩子。 其次,中序遍历,即为访问左孩子->访问根节点->访问右孩子。最后,以此类推,后序遍历就是访问右孩子->访问左孩子->访问根节点。

 

然后有一点,这样不断的访问,缩小范围,实质上也是一个递归的过程,一个表面上的递归过程。在我的理解中,递归,就是不断不断的缩小同种类型的范围,当到达某个点后,就开始不断往回走,这在二叉树的遍历中就能表现出来,本身二叉树遍历的代码就是一个递归的过程。

 

先序遍历:访问根节点->访问左孩子->访问右孩子。

如上图,我们按照顺序来,先访问根节点,毫无疑问,先是A,然后访问A的左孩子,然后,递归的形象化就出来了。因为A的左孩子又是一颗二叉树,如上面所说,缩小范围,所以,BCD就是一颗“新”二叉树,我们继续访问根节点,为B,然后访问左孩子,B的左孩子是C,其实,C也是一颗树,只不过它是一颗左右孩子都为空的树,继续访问根节点,为C。你看,对于BCD这棵树(以下二叉树我都简称为树)而言,根->B,左孩子->C,右孩子->D,所以它就访问结束了。然而,当BCD树访问完了,对于整个树来说,即A的左孩子,也访问完了,所以又像上面说的“往回走”。所以接下来轮到访问A的右孩子,对于E,为“新树EF”的根节点,访问,为E,E的左孩子为空,然后到右孩子,为F,F的左右都为空,至此,A的右孩子访问结束,所以,对于此树,先序遍历的结果为ABCDEF 。

 

中序遍历:访问左孩子->访问根节点->访问右孩子。

中序遍历也是如此的道理,先是访问左孩子,左孩子还有左孩子,递归下去,访问,为C,然后到根节点,为B,再到右孩子,为D,然后,对于整棵树而言,左孩子访问结束,轮到根节点,为A,然后,右孩子,对于“EF树”来说,左孩子为空,根节点为E,右孩子为F,所以分别是为E,为F,至此,整棵树的右孩子也访问结束。所以,对于此树,中序遍历的结果为CBDAEF。

 

后序遍历:访问左孩子->访问右孩子 ->访问根节点。

相信经过前两个的说明,大家也能掌握后序遍历的情况了,我们直接来,左孩子,“BCD”,继续左孩子,为C,右孩子,为D,根节点,为B,再到整棵树的右孩子“EF”,左孩子,为空,右孩子,为F,根节点,为E,左右结束,根节点,为A。对于此树,中序遍历的结果为CDBFEA。

 

所以三种遍历方式就是这样,因为我画的树比较小,所以递归的效果不是很明显的看出来,大家可以试着画棵大点的树,不断缩小缩小,然后又层层返回,就能形象的理解递归了。

 

 

转载于:https://www.cnblogs.com/yellowgg/p/6735293.html

详细易懂的二叉树遍历(先中后)相关推荐

  1. 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)

    二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...

  2. 二叉树的先中后序递归和非递归遍历(数据结构作业)

    一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...

  3. 数据结构之二叉树的前中后序遍历以及层序遍历

    学习目标:读完这篇博客搞定二叉树的前中后序以及层序遍历 首先:你应该明白什么是二叉树,下面这幅图就是一个完全二叉树 其实所谓的二叉树就是一个节点有小于等于二个分支的树,可以没有分支,可以有1条分支,可 ...

  4. 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]

    二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...

  5. Java二叉树的前中后序遍历

    Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...

  6. 深入理解二叉树的前中后序

    一.问题 二叉树的前中后序遍历到底是什么,仅仅是三个顺序不同的 List 吗?为什么多叉树没有中序遍历? 二.遍历框架 所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点 ...

  7. 二叉树 迭代 前 中 后_如何在Ruby中使用数组迭代计算二叉树的高度

    二叉树 迭代 前 中 后 Data structures and algorithms are the heart and soul of computer science and software. ...

  8. javascript数据结构与算法--二叉树遍历(中序)

    javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /**二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中*** ...

  9. 二叉树的前中后序遍历(考试常考)

    二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根).         由于树是通过 ...

最新文章

  1. DeepMind提出基于视觉的强化学习模型,十八般兵器对机器人不在话下
  2. 使用gitlab创建项目和添加成员,并提交本地代码至gitlab远程仓库
  3. C8-1 复数加减乘除 (100/100 分数)
  4. 有多少种方法能把足球移出边界 Out of Boundary Paths
  5. 区块链BaaS云服务(16)天德链TDBC“系统介绍”
  6. 判断两条线段是否相交
  7. 在架设网站服务器时,实习实习报告网站服务器架设.doc
  8. which 命令详解
  9. 一次性尿袋行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. Cocos2d-x v3.2笔记——总结Cocos2d-x 3.x版本的一些变化
  11. HTTP权威协议笔记-6.代理
  12. NOIP2015运输计划
  13. 神州计算机u盘启动,神舟台式机bios怎么设置从u盘启动
  14. 数据分析实战(三) 因子分析模型挖掘CSDN优质博主
  15. iPhone上塔罗牌测试软件,塔罗牌占卜:测Ta对你是用情至深还是一时兴起?准到没朋友!...
  16. 解决cherry pick提交报错问题
  17. matlab ode45使用,ODE45函数的使用——翻译
  18. MongoDB学习记录10-分片-副本集(mongodb3.2版本以前)
  19. 科达与中航工业签署战略合作协议
  20. yocto 编译流程分析

热门文章

  1. 关闭Bootstrap的modal后,重新打开还会有input里上传的file解决
  2. java加载一个来自项目之外的java文件,执行其main方法的一种实现方式
  3. GitHub上如何进行PR(Pull Request)操作——简版
  4. 机器学习理论入门:第二章 经典监督学习算法-决策树
  5. QT制作音乐播放器的相关知识点
  6. python的模块和类_Python模块和类.md
  7. 页面浏览事件之 $AppViewScreen 全埋点
  8. “星斗奖”九大类奖项揭晓:好未来、四川航空,瑞幸咖啡杨飞、中青旅张晓磊等入选...
  9. Redis-stat的安装与使用
  10. 【Socket】linux套接字技术之tcp