数据结构-二叉树

117 阅读3分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

二叉树

介绍

二叉树的几个重点:可以参考下 之前写的这篇文章 数据结构-树

这里主要讲解下 二叉树的遍历 ,二叉树有两种遍历:

  • 广度优先遍历(层次遍历)

  • 深度优先遍历

    深度优先遍历里边就有我们经常听到的 3 种遍历方式。

    • 先序遍历
    • 中序遍历
    • 后序遍历

二叉树的演示图:

image.png

广度优先遍历

层次遍历很简单,从上到下,从左到右一次遍历,结果为 A1 ~ A9

深度优先遍历

深度优先遍历 的 二叉树 是有3种遍历方式,而 ,只有 先序遍历 和 后续遍历 这两种。

二叉树的 深度优先遍历:

  • 先序遍历

    从根节点开始,从左分支开始,依次向左下进行查找,直到找到最左侧的叶子节点,然后向上找父节点的右孩子节点。

    就按这个思路进行遍历查找,如果左分支没有的话,就从右分支开始进行,得到的路径的结果为

    A1,A2,A4,A5,A8, A3,A6,A9,A7

  • 中序遍历

    从左分支下的最左侧的叶子结点开始,从下往上,从左到右依次查找,到根节点后,再从右分支下的最左侧的叶子结点开始,从下往上,从左到右依次查找。

    是不是觉得上面的话,啰里啰唆,难理解死了,直接给下面图。

    image.png

    是否觉得直观了不少,就把他们对应在一条轴线上,就可以得到中序遍历的结果,结果为

    A4,A2,A8,A5, A1, A6,A9,A3,A7

  • 后序遍历

    从左分支下的最左侧的叶子结点开始,然后跳过其父节点,再从父节点的右分支下的最左侧的叶子节点开始。依次这样查找。直到最终为根节点结束。

    果然用文字表示就是难理解。这里还是用图来表示吧,不过这次用图来直观看的话,这边得分两步,讲解下,应该会更透彻,更好理解。

    第一部分图: image.png

    最终图:

    image.png

    两张图进行比对,来讲解

    • 从左分支的最深层开始 A4

    • 跳过其父节点 A2

    • 寻找 父节点 的 右孩子 的 最左侧节点 A8,也就是图中 绿色的第 1 条线

    • 如果当前的父节点无右孩子,则走到当前父节点 A5

    • 右孩子遍历完毕后,就到 A2

    • 同理,跳过 A2 的父节点(根节点)A1

    • 寻找 父节点 的 右孩子 的 最左侧节点,由于此时没有,则直接到 A9,也就是 绿色第 2 条线

    • 此时的父节点为 A6

    • 同理,跳过 A6 的父节点(根节点)A3

    • 寻找 父节点 的 右孩子 的 最左侧节点 --> 最右侧节点,都没有,所以为 A7

    • 右孩子遍历完毕后,就到 A3

    • 右分支也遍历完毕,到达根节点 A1

    结果为

    A4,A8,A5,A2, A9,A6,A7,A3, A1

总结

这里讲了数据结构中,二叉树 的遍历方式,广度优先遍历深度优先遍历 这两种,以及 深度优先遍历 下所存在的 3 种遍历方式 先序遍历中序遍历后序遍历。并在难的部分进行图解来直观得到结果。