1.概述

在计算机科学中,线性数据结构只能以一种逻辑方式遍历。然而,树数据结构可以通过几种不同的方式进行遍历。

在本教程中,我们将讨论遍历树的各种方法以及这种操作的时间复杂性。

2.什么是树遍历?

树遍历就是只访问一棵树中的每个节点一次的过程。现在,从当前的节点,可能有一个以上的节点,我们可以到达。因此,节点的访问顺序可能不同。让我们举个例子:

可以以许多不同的方式遍历这棵树的节点。一些遍历顺序是:

  • 订单1:A B C D E E F
  • 订单2:A B D E C C F
  • 订单3:D \right \ tarrow E \right \ tarrow F \right \ tarrow B \right \ tarrow C \right \right

因此,根据访问的节点,遍历分为两类:深度优先遍历和关卡顺序或广度优先遍历。

深度优先遍历可进一步分为三种遍历类型:按次序的,预购,后序遍历。

3.树遍历技术

根据序遍历,我们首先访问左子树中的节点,然后是根节点和右子树中的节点。我们首先搜索左边叶子节点以开始序遍历。

在预购遍历,我们首先访问根节点,然后是左子树,最后是右子树。

在后序遍历的情况下,我们访问左子树,然后是右子树,最后是根节点。

最后,对于水平顺序或宽度优先遍历,我们访问树中的所有节点水平时尚的水平。我们从根节点开始,进入下一层访问节点。

4.例子

现在我们拿一个例子树,让我们找到树的各种遍历:

如果我们在这个例子树中应用顺序遍历,这个树的顺序遍历就是G \right tarrow D \right tarrow H \right tarrow B \right tarrow E \right tarrow A \right tarrow C \right tarrow F

在预序遍历的情况下,我们首先访问根节点。因此,该树的预序遍历如下:A \right - row B \right - row D \right - row G \right - row H \right - row E \right - row C \right - row F

在后序遍历中,我们遍历末尾的根节点。因此,该树的后序遍历为:G \right tarrow H \right tarrow D \right tarrow E \right tarrow B \right tarrow F \right tarrow C \right tarrow A

示例树的级别-顺序遍历如下:A \right tarrow B \right tarrow C \right tarrow D \right tarrow E \right tarrow F \right tarrow G \right tarrow H

5.树遍历的时间复杂性

在一般情况下,所有遍历算法都只访问一棵树中的每个节点一次。因此,所有遍历算法的时间复杂度为\ mathcal {O} (N)当树包含N节点。

为了验证整个时间复杂度,我们取一个极端情况,我们要找出访问所有节点的时间复杂度。如果一棵树有N节点,则时间复杂度T (N)可以定义为:

\[T(N) = T(L) + (N - L - 1) + C\]

l树左边的节点数是多少C表示一个常数时间。现在假设给定的树是a右偏态树对于向右倾斜的树,树的左侧将为空。所以L = 0:

\[T(N) = T(0) + (N - 1) + C\]

\[T(N) = 2T(0) + T(N-2) + 2C\]

\[T(N) = 3T(0) + T(N-3) + 3C\]

\[T(N) = 4T(0) + T(N-4) + 4C\]

如果继续,会得到:

\[T(N) = (N-1)T(0) + T(1) + (N-1)C\]

\[T(N) = NT(0) + (N)C\]

T (0)表示遍历空树,耗时不变:

\ [T (N) = NT (0) + (N) C =数控+ NC数控= = 2 \ mathcal {O} (N) \]

因此,我们验证了所有的树遍历算法都需要\ mathbf {\ mathcal {O} (N)}}时间。

6.结论

在本教程中,我们学会了几种遍历树的方法。我们呈现每个遍历的算法,并用示例演示。最后,我们分析了遍历算法的时间复杂性。

客人
0评论
内联反馈
查看所有评论