Code前端首页关于Code前端联系我们

二叉树的三种遍历数据结构图解及代码实现

terry 2年前 (2023-09-27) 阅读数 66 #数据结构与算法

二叉树的遍历是指从根节点开始,按照一定的顺序依次访问二叉树中的所有节点,使得每个节点被访问一次且仅访问一次。

二叉树遍历中比较常用的遍历方式有三种:前序遍历、中序遍历、后序遍历。接下来我会尝试用三组动画向读者详细介绍这三种遍历方式的逻辑思想,希望读者看到每一棵二叉树时都能快速勾勒出脑海中的动画。

前提

在介绍这三组动画之前,我们首先使用图像来创建二叉树,并介绍一些约定和动画。 二叉树三种遍历数据结构图解及代码实现

如图所示 是二叉树中的一个节点。这个节点有左子树和你子树。该节点被两条绿色连接线分为三个区域。我们分别使用前、中、后区域。由辅助点表示。

这三个点表示二叉树遍历时何时检索该节点的值。

按照前左绿线-中-右绿线-后的顺序遍历每个节点。

先序遍历

利用递归实现前序遍历的具体过程是:

  • 先访问根节点
  • 然后左子树将顺序以正确的❓王牌我们来做一下吧完整解释上面的动画来理解前序遍历的递归实现。
    • 首先访问节点28。我们看之前的辅助点。由于是前序遍历,所以我们取出节点28
    • 的值,然后通过左边的绿线到28。左子树
    • 在节点16中,我们看之前的辅助点。既然是前序遍历,则取出节点16
    • 的值,通过左边绿线走到16的左子树。 在节点13中,我们在之前看到辅助点。由于是前序遍历,所以提取这个节点13
    • 13的值。这个节点左子树是空的,所以我们左边的绿线不存在。然后查看中的帮助点。由于是前序遍历,所以不会进行处理。
    • 13这个节点的右王牌是空的,所以我们的右绿线不在那里。然后再看辅助点 ,因为是前序遍历,所以不处理
    • 然后回到节点16,在辅助点中查找,因为是a 前序遍历 遍历是,所以不处理
    • 然后看16节点的右王牌节点,再看❀之前的辅助点。由于是前序遍历,因此提取节点22
    • 的值。 。 。

    代码实现:

    二叉树三种遍历数据结构图解及代码实现

    中序遍历实现测替换笔划的具体过程,实现顺序遍历为:
    • 先按顺序最后按顺序右王牌
    二叉树三种遍历数据结构图解及代码实现

    来完整说明一下通过上面的动画来理解顺序遍历的递归实现。

    • 首先访问节点28。我们看之前的辅助点。由于是顺序遍历,所以不会处理
    • ,然后通过左边绿线从28访问左子树。 在结16中,我们查看之前的辅助点。由于是订单遍历,所以不做处理。
    • 左子树
    • 16可通过左侧绿线访问,并且13在此节点中我们查看之前的辅助点。由于是顺序遍历,所以不做任何处理。
    • 13这个节点左子树是空的,所以我们左边的绿线不存在,然后我们看辅助点,因为是中序遍历,取出节点的值这个节点的右王牌为空,那么我们的右绿线不存在,再看之后的辅助点,因为是按顺序遍历,所以不处理
    • 然后回到节点16,看辅助点和。既然是中序遍历,就取出节点16
    • 的值,然后看16这个节点的真正王牌22这个节点,看之前的辅助点,因为它是中序遍历is,所以不处理
    • 参见帮助点和,因为是中序遍历,所以取出节点♷❝的值。 。 。

    代码实现:

    二叉树三种遍历数据结构图解及代码实现

    后序遍历

    使用递归实现后序遍历的具体过程为: 最后访问的根节点

二叉树三种遍历数据结构图解及代码实现

让我们完整地解释一下上面的动画吧了解后序遍历的递归实现。

  • 首先访问节点28。我们看之前的辅助点。由于是后序遍历,所以不会处理
  • ,然后通过左边的绿线从28访问左子树。 在结16中,我们查看之前的辅助点。由于是后序遍历,所以不做处理。
  • 左子树
  • 16可通过左侧绿线访问,并且13在此节点中我们查看之前的辅助点。由于是后序遍历,所以不做任何处理。
  • 13这个节点左子树是空的,所以我们左边的绿线不存在,然后我们看辅助点,因为是后序遍历,所以不处理。这个节点的右王牌是空的,所以我们的右绿线不在那里。然后看后面的辅助点,因为是后序遍历,所以从节点中取出值13
  • ,然后返回到节点16。请参阅帮助点 和 。因为是后序遍历,所以对
  • 不做任何处理,然后看16这个节点的真正王牌22这个节点,看之前的辅助点是一次遍历顺序中,所以不处理
  • 参见帮助点和,因为是后序遍历,所以
  • 不处理。请参阅之后的帮助点。由于是后序遍历,因此提取节点16
  • 的值。 。 。

代码实现:

二叉树三种遍历数据结构图解及代码实现

作者:MisterBooo
来源:掘金

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门