构建有效的堆

时间:2011-06-02 08:40:40

标签: heap

我只需要验证一下我是否正确地这样做了。我检查了wiki是否有一个堆,但是在动画中似乎构建了堆,它将数字插入节点并按顺序对其进行排序。

问题是“用这些元素绘制一个有效的堆.. {7,12,1,3,22,5,11}作为树”

我已经尝试了几个例子,似乎我应该首先布局节点然后重新排序节点而不是按照我的顺序排序。我这样做的方式是否正确?

例如,将元素放入节点

       7

   12     1

 3  22   5  11

订购从这里开始:交换1和7

       7

   12     1

 3  22   5  11

交换3和12

       1

   12     7

 3  22   5  11

交换5和7

       1

   3       7

 12  22   5  11

进行。

       1

   3       5

 12  22   7  11

其实这不对。

答案是

       1

   7       3

 12  22   5  11

如果我首先从左侧开始重新排序堆(从3开始),那么我会得到正确答案。

1 个答案:

答案 0 :(得分:3)

实际上,堆数据结构只作为一个属性,可以定义如下:“在堆T中,对于除根之外的每个节点v,存储在v中的密钥大于或等于存储的密钥在v的父母。“

因此,基于元素(7,12,1,3,22,5,11)的堆有许多正确的表示。使用这些元素,我应用了“插入和排序”算法,结果给出了另一个版本:

        1
   3         5
12   22   7    11