1.概述

是一种特殊类型的平衡二叉树数据结构。堆上的非常常见的操作是Heapify,它重新排列堆以维持其性质。

在本教程中,我们将讨论Heapify操作的变体:Max-Heapify。我们将讨论如何详细讨论如何在二叉树中执行Max-Heapify操作。

2.堆的定义

堆或二进制堆是一个完整的二叉树具有一些附加属性,称为堆属性。现在在跳入堆属性之前,请注意,堆有两个变体:max-heap和min-heap。堆属性使用每个变体更改一点。

让我们首先讨论MAX-HEAP的堆属性。根据堆属性,堆中每个节点的键或值始终大于其子节点,根节点的键或值始终是堆树中最大的。

Min-Heap的堆属性每个子节点的值或键始终大于其父节点,并且根节点的值始终是堆中最小的。

让我们来看看一些例子:

在第一树中,根节点是树中所有其他节点中的最高值密钥节点。另外,在所有的子树,每个父节点具有更大的valued键,然后是子节点。因此,它遵循Max-Heap属性。

在第二个示例中,根节点是树中所有其他节点中最小的。我们还可以观察到,此堆中的子树中的每个父母都比子节点的值较小。因此,它满足了闽堆业。

3. Max-Heapify操作

max-heapify是一个以正确的顺序排列节点的过程,以便它们关注Max-eAP属性。让我们首先查看伪电讯,然后我们将详细讨论每个步骤:

QuickLatex.com呈现

我们拿一个数组B.和节点的索引S.作为输入。变量剩下正确的表示起始节点的左侧和右子节点S.

然后我们安排节点S.及其来自输入阵列的子树B.以这样的方式,它满足MAX-eAP属性。

使用max \! -  \!heapify(),我们构建了一个max-heap。我们使用处于树的最低级别的节点启动算法,并具有儿童节点。然后,我们根据MAX-HEAP属性排列当前节点及其子节点。

一旦我们完成这一步骤,我们继续此过程,并确保所有子树都遵循Max-eAP属性。这样,我们称之为max \! -  \!heapify()递归和迭代回根节点,确保树遵循MAX-eAP属性。

接下来让我们看看如何从输入数组中构建堆。当输入数组不服从堆属性时,我们致电Max \! -  \!堆\! -  \!BUILDS()建立一堆堆,然后我们跑max \! -  \!heapify()在构造的堆树上:

QuickLatex.com呈现

4. MAX-HEAPIFY示例

让我们拿一个输入数组B = [10,20,25,6,12,15,4,16]。第一步是从数组中创建二进制树:

现在我们将在最低级别拍摄子树,并开始检查它是​​否遵循Max-eAP属性:

正如我们所看到的,子树不遵循Max-Heap属性。在这里,父节点应包含比其子节点更大的值。因此,为了确保树遵循MAX-eALP属性,我们会在子节点和父节点之间交换密钥值。

让我们继续将所有子树从最低级别审视到顶级:

此子树遵循Max-Heap属性,我们不需要在此处更改任何内容。接下来,我们看右侧分支:

Subtree再次遵循Max-Heap属性。让我们继续这个过程:

在这里,我们可以看到根节点的键值不是树中所有节点中最大的。因此,我们将根节点的键值与其右侧子节点的键值交换,以与Max-eAP属性匹配。

现在,在交换后,我们需要从根节点检查右子节点,以便查看它是否遵循Max-eAP属性:

最后,我们要检查整个树,以便查看它是否满足Max-Heapify属性,然后我们将获得最终的Max-eAP树:

结论

在本教程中,我们已经讨论了二进制堆中最大化的过程。我们还提出了演示如何从输入数组创建MAX-堆的示例。

评论在本文上关闭!