
最小堆就是越小越在上面
其中 pq指向堆,i 为堆元素在数组中的下标。该函数假设元素i对应的子树都已经是最小堆(符合最小堆的要求),但元素i为根的子树并不是最小堆,min_heapify将对元素i及其子树的各结点进行调整,使其为一个最小堆。
(注:假设辅助函数 left、right、parent 和 swap_node 已正确实现,min_heapify 函数可直接使用。)
#include <stdio.h>
#include <stdlib.h>
#include "minbinheap.h"
void min_heapify(PMinHeap pq, int i){
int j = parent(i);
//if(pq->heap_array[i].value > pq->heap_array[j].value) return;
for(; j >= 0 && pq->heap_array[i].value > pq->heap_array[j].value; i = j, j = parent(i))
swap_node(&pq->heap_array[i], &(pq->heap_array[j]));
}
这个地方真没看懂最开始的题目的意思,到底是i的上面的不是最小堆(根)还是下面(子树)不是最小堆????你i为根不就是 其他的子树的跟??(最后答案尝试出来是i作为叶节点)
本文详细介绍了最小堆的调整过程,特别是`min_heapify`函数的实现,该函数用于确保以i为根的子树满足最小堆性质。通过迭代比较并交换父节点与子节点,函数最终使整个子树形成最小堆。辅助函数如`left`、`right`、`parent`和`swap_node`的正确实现是关键。
3988

被折叠的 条评论
为什么被折叠?



