一,基础概念
堆结构是一种完全二叉树。
完全二叉树的结构特点是,除了最后一层,其他层的节点数都是满的,最后一层的节点靠左排列。
堆结构分为两种类型:最小堆和最大堆。
最小堆:父节点元素的值都小于或等于子节点,根是树中的最小元素。
最大堆:父节点元素的值都大于或等于子节点,根是树中的最大元素。
堆结构常应用于排序和生成优先级队列。
最小堆和最大堆图示:
二,堆结构的基本操作
1.堆结构的表示
堆结构经常使用一个数组来实现,树的根是数组的第一个元素。
数组属于顺序存储,比使用了指针的链式存储节省空间,且不需要为左/右子节点指针分配内存空间。
使用数组表示堆结构和二叉树中的方法一样,假如堆结构中的一个节点,索引为N,可以得到:
父节点的索引:N // 2(整除)
左子节点的索引:N * 2 或 N * 2 + 1
右子节点的索引:N * 2 + 1 或 N * 2 + 2
图示样例:
2.数组的堆化(Heapify)
如果往堆中的根节点或者叶子节点中