问题:
通过按给定顺序插入以下元素来创建堆。每次插入后显示堆并涓涓细流。(应该实现堆以将最高的键值保持在顶部。)
5 4 6 7 9 8 1 2 3
完成创建堆后,从中删除每个元素。每次删除和涓流后显示堆。指示在每个步骤中删除了哪个元素。
我知道如何将元素插入堆,但如何创建它?而且我真的不确定如何从堆中删除元素。
问题:
通过按给定顺序插入以下元素来创建堆。每次插入后显示堆并涓涓细流。(应该实现堆以将最高的键值保持在顶部。)
5 4 6 7 9 8 1 2 3
完成创建堆后,从中删除每个元素。每次删除和涓流后显示堆。指示在每个步骤中删除了哪个元素。
我知道如何将元素插入堆,但如何创建它?而且我真的不确定如何从堆中删除元素。
我将假设我的答案是一个二进制堆,有许多不同的堆,但是由于这听起来像家庭作业并且是一个相当基本的问题,我将介绍最基本的堆:
好吧,首先堆是空的。
然后你插入 5,所以堆现在是:
5
然后在底部插入 4。4 小于 5,所以我们不会改变它与它的父级的位置。堆现在是:
5
/
4
然后我们在底部插入 6,低于 5(总是从左到右插入底部)。我们将新插入的节点 (6) 的值与它的父节点 (5) 进行比较,并意识到我们必须交换它们,以免违反堆属性:
6
/ \
4 5
现在我们在下一个可用位置(在 4 下方)插入 7,并将其与它的父级交换,因为 7 > 4。然后我们再次交换(或涓流),因为 7 > 6 并得到:
7
/ \
6 5
/
4
等等...