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