由浅入深讲二叉树4种遍历算法的由来
遍历二叉树的算法
图 1 二叉树示意图
图 1 是一棵二叉树,对于初学者而言,遍历这棵二叉树无非有以下两种方式。
层次遍历
比如,对图 1 中二叉树进行层次遍历,遍历过程如图 2 所示:
图 2 层次遍历二叉树示意图
普通遍历
还拿图 1 中的二叉树举例,其遍历过程如图 3 所示:
图 3 普通方式遍历二叉树
以上仅是从初学者的角度,对遍历二叉树的过程进行了分析。接下来我们从程序员的角度再对以上两种遍历方式进行剖析。
二叉树遍历算法再剖析
若对图 1 中二叉树进行层次遍历,则访问树中节点的次序为:
图 4 遍历节点 2 的过程示意图
因此,在编程实现时,我们可以设定真正访问各个节点的时机,换句话说,我们既可以在第一次经过各节点时就执行访问程序,也可以在第二次经过各节点时访问,甚至可以在最后一次经过各节点时访问。
这也就引出了以下 3 种遍历二叉树的算法:
-
先序遍历:每遇到一个节点,先访问,然后再遍历其左右子树(对应图 4 中的 ①); -
中序遍历:第一次经过时不访问,等遍历完左子树之后再访问,然后遍历右子树(对应图 4 中的 ②); -
后序遍历:第一次和第二次经过时都不访问,等遍历完该节点的左右子树之后,最后访问该节点(对应图 4 中的 ③);
以图 1 中的二叉树为例,其先序遍历算法访问节点的先后次序为:
以上就是二叉树 4 种遍历算法的由来,其各个算法的具体实现过程其代码实现后续章节会详解介绍。