📜  二叉堆的数组表示(1)

📅  最后修改于: 2023-12-03 14:49:01.051000             🧑  作者: Mango

二叉堆的数组表示

简介

二叉堆是一种基于完全二叉树的数据结构,是一种特殊的堆。在二叉堆中,根节点的值必须小于或等于子节点的值,因此又被称作最小堆。二叉堆常用数组来表示。

数组表示

二叉堆的数组表示需要满足以下条件:

  • 对于下标为 i 的节点,其左子节点的下标为 2i+1,右子节点的下标为 2i+2。
  • 父节点的下标为 floor((i-1)/2)。

数组的第一个元素是根节点,其余元素按照从上到下、从左到右的顺序填充。因此,我们可以通过数组下标来访问节点,可以快速定位节点的位置。

class MinHeap:
    def __init__(self, capacity):
        self.capacity = capacity
        self.size = 0
        self.data = [0] * capacity
    
    def left_child(self, index):
        return 2 * index + 1
    
    def right_child(self, index):
        return 2 * index + 2
    
    def parent(self, index):
        if index == 0:
            raise ValueError("Heap is empty")
        return (index - 1) // 2

    # 省略其他方法的实现
操作

二叉堆的数组表示提供了以下常见操作:

  • 插入:向堆中插入新的元素。
  • 删除:从堆中删除最小元素。
  • 查找:查找堆中的最小元素。
  • 修改:修改堆中的元素值。

这些操作的时间复杂度取决于堆的大小,时间复杂度分别为 O(log n)。

总结

二叉堆的数组表示是一种简单、快速的实现方式,可以很好地支持堆操作。通过掌握数组表示的原理和操作,可以有效地实现二叉堆,并在实际工程中得到应用。