Data structures 最小堆中的Heapify-Down方法

Data structures 最小堆中的Heapify-Down方法,data-structures,binary-heap,min-heap,Data Structures,Binary Heap,Min Heap,当前正在尝试在此处使用Repl获取最小堆: 最小堆的容量为5 插入第6个元素(50)后,我们交换索引0和索引5处元素的位置,并从堆中弹出最小的元素,离开堆,如下所示: [50,10,20,40,30] 我的具体查询必须处理第39-40行 从控制台日志中可以看到,我们第一次调用trickeDown()方法时,表示索引位置50的min(0)变为leftChild,并最终与索引1交换位置,结果如下: [50,10,20,40,30] 但是,在trickleDown()方法的第二次调用中,位于索引1的5

当前正在尝试在此处使用Repl获取最小堆:

最小堆的容量为5

插入第6个元素(50)后,我们交换索引0和索引5处元素的位置,并从堆中弹出最小的元素,离开堆,如下所示:

[50,10,20,40,30]

我的具体查询必须处理第39-40行

从控制台日志中可以看到,我们第一次调用trickeDown()方法时,表示索引位置50的min(0)变为leftChild,并最终与索引1交换位置,结果如下:

[50,10,20,40,30]

但是,在trickleDown()方法的第二次调用中,位于索引1的50假定rightChild的位置,并与索引4交换位置以形成最终堆,如下所示:

[10,30,20,40,50]


也许我只是遗漏了一些东西,但我不确定为什么min在第一次运行时决定成为leftChild,在第二次运行时决定成为rightChild,因为min堆中的最大元素不是50,因为每次调用该方法时都会同时满足For循环?

在第一次调用中,我们比较了50、10和20。
min
从0开始,表示50。
10小于50,因此
min
变为1。
20不小于10,因此
min
不会改变。
我们已经找到了最小值:10

在第二次通话中,我们比较了50、40和30。
min
从1开始,表示50。
40小于50,因此
min
变为3。
30小于40,因此
min
变为4。
我们已经找到了最小值:30


仅找到一个小于50的元素是不够的;我们必须找到最小值。交换50和20不会产生有效的最小堆。

欢迎使用堆栈溢出。请在问题中发布所需代码,而不仅仅是指向所需代码的链接。