0

问题:

通过按给定顺序插入以下元素来创建堆。每次插入后显示堆并涓涓细流。(应该实现堆以将最高的键值保持在顶部。)

5 4 6 7 9 8 1 2 3

完成创建堆后,从中删除每个元素。每次删除和涓流后显示堆。指示在每个步骤中删除了哪个元素。

我知道如何将元素插入堆,但如何创建它?而且我真的不确定如何从堆中删除元素。

4

1 回答 1

1

我将假设我的答案是一个二进制堆,有许多不同的堆,但是由于这听起来像家庭作业并且是一个相当基本的问题,我将介绍最基本的堆:

好吧,首先堆是空的。

然后你插入 5,所以堆现在是:

5

然后在底部插入 4。4 小于 5,所以我们不会改变它与它的父级的位置。堆现在是:

   5
  /
 4

然后我们在底部插入 6,低于 5(总是从左到右插入底部)。我们将新插入的节点 (6) 的值与它的父节点 (5) 进行比较,并意识到我们必须交换它们,以免违反堆属性:

   6
  / \
 4   5

现在我们在下一个可用位置(在 4 下方)插入 7,并将其与它的父级交换,因为 7 > 4。然后我们再次交换(或涓流),因为 7 > 6 并得到:

    7
   / \
  6   5
 /
4

等等...

于 2012-06-25T08:35:06.880 回答