堆是将一组数据按照完全二叉树的存储顺序,将数据存储在一个一维数组中的结构。
大顶堆:任意节点的值均大于等于它的左右孩子,并且最大的值位于堆顶,即根节点处。
小顶堆:任意节点的值均小于等于它的左右孩子,并且最小的值位于堆顶,即根结点处。
堆的构造:
对于一个节点,当它在数组中的下标为 i 时:i 为 0 ,为根节点,i >= 1 时,父节点为 (i - 1) / 2 。
将数组元素依次排到完全二叉树上,然后从最后一个元素开始寻找父元素并且比较大小,以此为依据来判断是否需要交换,过程结束后前一个元素继续进行该过程,直到根节点也满足要求。
堆的插入操作:
将新元素插入到保持完全二叉树的最后一个位置,然后顺着这条支路一直向上调整,每前进一层就要保证其子树都满足堆的规则,否则就去处理子树,直到完全满足要求。
堆的删除操作:
堆中的数据进行操作一般都是针对堆顶的元素。
删除的时候一般是删除堆顶元素,先将堆中的最后一个元素和堆顶元素进行替换,然后删除堆中最后一个元素,之后再从根开始逐步与左右子树比较,谁大就把谁移上去,不断比较,直到完全满足要求。
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤