2 树的遍历 - 介绍

1. 树的遍历

在上节的介绍中,相信大家已经熟知了树和二叉树的基本概念。

本章节,我们把重点放在介绍二叉树中几种常见的遍历方法。掌握这几种遍历方法,会加深你对树这个数据结构的理解,并为以后的学习打下扎实的基础。

本章目标:

  • 理解和区分树的遍历方法
  • 能够运用递归方法解决树的为前序遍历、中序遍历和后序遍历问题
  • 能用运用迭代方法解决树的为前序遍历、中序遍历和后序遍历问题
  • 能用运用广度优先搜索解决树的层序遍历问题

2. 树的遍历 - 介绍

前序遍历
中序遍历
后序遍历
递归和迭代

2.1 前序遍历

前序遍历 首先访问根节点,然后遍历左子树,最后遍历右子树

请看下面的例子:

2 树的遍历 - 介绍_第1张图片
2 树的遍历 - 介绍_第2张图片
2 树的遍历 - 介绍_第3张图片
2 树的遍历 - 介绍_第4张图片
2 树的遍历 - 介绍_第5张图片
2 树的遍历 - 介绍_第6张图片
2 树的遍历 - 介绍_第7张图片
2 树的遍历 - 介绍_第8张图片
2 树的遍历 - 介绍_第9张图片
2 树的遍历 - 介绍_第10张图片
2 树的遍历 - 介绍_第11张图片
2 树的遍历 - 介绍_第12张图片
2 树的遍历 - 介绍_第13张图片
2 树的遍历 - 介绍_第14张图片
2 树的遍历 - 介绍_第15张图片
2 树的遍历 - 介绍_第16张图片
2 树的遍历 - 介绍_第17张图片
2 树的遍历 - 介绍_第18张图片
2 树的遍历 - 介绍_第19张图片

2.2 中序遍历

中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树

让我们一起来看树的中序遍历:

2 树的遍历 - 介绍_第20张图片
2 树的遍历 - 介绍_第21张图片
2 树的遍历 - 介绍_第22张图片
2 树的遍历 - 介绍_第23张图片
2 树的遍历 - 介绍_第24张图片
2 树的遍历 - 介绍_第25张图片
2 树的遍历 - 介绍_第26张图片
2 树的遍历 - 介绍_第27张图片
2 树的遍历 - 介绍_第28张图片
2 树的遍历 - 介绍_第29张图片
2 树的遍历 - 介绍_第30张图片
2 树的遍历 - 介绍_第31张图片
2 树的遍历 - 介绍_第32张图片
2 树的遍历 - 介绍_第33张图片
2 树的遍历 - 介绍_第34张图片
2 树的遍历 - 介绍_第35张图片
2 树的遍历 - 介绍_第36张图片
2 树的遍历 - 介绍_第37张图片
2 树的遍历 - 介绍_第38张图片
2 树的遍历 - 介绍_第39张图片
2 树的遍历 - 介绍_第40张图片
2 树的遍历 - 介绍_第41张图片

通常来说,对于二叉搜索树,我们可以通过中序遍历得到一个递增的有序序列。 我们将在另一张卡片(数据结构介绍 – 二叉搜索树)中再次提及。

2.3 后序遍历

后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点

我们一起来看后序遍历的动画演示:
2 树的遍历 - 介绍_第42张图片
2 树的遍历 - 介绍_第43张图片
2 树的遍历 - 介绍_第44张图片
2 树的遍历 - 介绍_第45张图片
2 树的遍历 - 介绍_第46张图片
2 树的遍历 - 介绍_第47张图片
2 树的遍历 - 介绍_第48张图片
2 树的遍历 - 介绍_第49张图片
2 树的遍历 - 介绍_第50张图片
2 树的遍历 - 介绍_第51张图片
2 树的遍历 - 介绍_第52张图片
2 树的遍历 - 介绍_第53张图片
2 树的遍历 - 介绍_第54张图片
2 树的遍历 - 介绍_第55张图片
2 树的遍历 - 介绍_第56张图片
2 树的遍历 - 介绍_第57张图片
2 树的遍历 - 介绍_第58张图片
2 树的遍历 - 介绍_第59张图片
2 树的遍历 - 介绍_第60张图片

值得注意的是,当你删除树中的节点时,删除过程将按照后序遍历的顺序进行。 也就是说,当你删除一个节点时,你将首先删除它的左节点和它的右边的节点,然后再删除节点本身。

另外,后序在数学表达中被广泛使用。 编写程序来解析后缀表示法更为容易。 这里是一个例子:

2 树的遍历 - 介绍_第61张图片

您可以使用中序遍历轻松找出原始表达式。 但是程序处理这个表达式时并不容易,因为你必须检查操作的优先级。

如果你想对这棵树进行后序遍历,使用栈来处理表达式会变得更加容易。 每遇到一个操作符,就可以从栈中弹出栈顶的两个元素,计算并将结果返回到栈中。

2.4 递归和迭代

请练习文章后面习题中的三种遍历方法。 您可以通过递归或迭代方法实现算法,并比较它们之间的差异。

你可能感兴趣的:(#,3,二叉树)