二叉堆(binary heap)是一种特殊的二叉树,它满足以下几个条件:/n/n1. 它是一棵完全二叉树,即除了最后一层外,其它层都被填满,最后一层从左到右填充。(完全二叉树的性质决定了它可以用数组来表示)/n/n2. 对于每个节点,它的值都大于等于它的左右子节点的值(最大堆),或者小于等于它的左右子节点的值(最小堆)。/n/n根据这两个条件,可以将二叉堆分为两种:最大堆和最小堆。/n/n最大堆中,每个节点的值都不小于它的子节点的值,即对于任意节点 $i$,$A[parent(i)] /geq A[i]$。/n/n最小堆中,每个节点的值都不大于它的子节点的值,即对于任意节点 $i$,$A[parent(i)] /leq A[i]$。/n/n二叉堆的基本操作包括插入、删除和获取最值:/n/n1. 插入操作:将新节点插入到二叉堆的末尾,然后通过向上调整(percolate up)将其移到合适的位置,使得堆仍然满足二叉堆的性质。/n/n2. 删除操作:删除堆顶元素,将最后一个元素移动到堆顶,然后通过向下调整(percolate down)将其移到合适的位置,使得堆仍然满足二叉堆的性质。/n/n3. 获取最值:最大堆可以直接获取堆顶元素,最小堆可以直接获取堆顶元素,两种堆都可以通过获取堆顶元素来获取最值。/n/n二叉堆的时间复杂度分析:/n/n1. 插入操作的时间复杂度为 $O(log n)$,因为最多需要向上调整 $log n$ 次。/n/n2. 删除操作的时间复杂度为 $O(log n)$,因为最多需要向下调整 $log n$ 次。/n/n3. 获取最值的时间复杂度为 $O(1)$,因为最值就是堆顶元素。

二叉堆详解:概念、操作及时间复杂度

原文地址: https://www.cveoy.top/t/topic/odx1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录