求助,! 将序列之争520, 1314, 69,886,748, 555插入最小堆中,堆顶元素是

1、将数组前N个数调整成最小堆

2、堆顶元素值依次与第N个元素以后的每个元素进行比较

3、若堆顶元素值小则将堆顶元素重新赋值为新元素的值,并且将前N个数重新调整为朂小堆;否则判断下一个元素

4、直到遍历完原数组的最后一个元素后则最小堆中的元素即为待求的数组中的N个最大的数

这种题目还是楼上用画图的形式悝解起来简单直观

删除零号元素后,最后一个元素替换零号元素然后调用下滑调整算法。

删除堆顶元素以后要用最后一个元素替换

对於最小堆和最大堆而言删除是针对于根节点而言。对于删除操作将二叉树的最后一个节点替换到根节点,然后自顶向下递归调整。

刪除最小元素在根节点

所以将最后一个元素放到根节点,进行下沉操作(sink());

首先题目有问题,[02,14,39,5 8 ,67], 原数组是這样才对得上号

即先将堆的最后元素代替堆顶元素,再和左右子树比较与最小元素交换,直至终结

最小堆删除堆顶后用最小堆删除堆顶后,用最后一个元素暂代堆顶一个元素暂代堆顶删除顶元素后,最后一个元素替换而不是,第二层中小的那个数替换上

记得是最後一个补到第一个挪走的元素

7上移再重新调整顺序

删除堆顶元素后,将最后一个元素暂放到堆顶因为堆的数据,由上层到下层的建值逐渐变小所以将新得到的堆顶元素7依次与堆下层的元素相比较,如果下层有比7小的则选出其中的最小值与7交换。依次到最底层执行唍毕,新的堆序则产生

题目不会做,首先问问自己这个概念还记得吗?很多题不会做很大原因是忘记了概念。比如这道题删除最尛数后,该把哪个数替换上

起始为小顶堆,因此根节点为0第一层从左到右为2,1,第三层从左到右为4395第四层从左到右为867,当0删除后7变為根节点,此时根节点的孩子为2和1根节点为7的节点和1孩子节点交换位置,即它的右孩子然后7节点的孩子变为9和5,7和5交换,因此最后变为1、2、5、4、3、9、7、8、6

我不会解这道题求解!

step1:去掉0,将最后一位放到第一位0的位置此时非最小堆。

step2:将7与左右子节点中比较小的1交换此时依然非最小堆。

step3:将7与左右节点中最小的5交换此时为最小堆。

最后一个值和0交换,逐一下沉

我要回帖

更多关于 序列之争 的文章

 

随机推荐