[数据结构]堆结构
堆
堆,是一棵被完全填满的二叉树,唯一可能的例外是它的底层,底层的元素从左到右填入。这样的树被称为完全二叉树。下图就是一个例子:
图-完全二叉树/堆
因为二叉堆非常具有规律,所以实际上我们可以直接用数组来表示,而不需要结构体和指针。
比如上图中的堆,我们可以用下面这个数组来表示
图-堆的数组实现
可以发现,处在 i 位置上的元素就是 2*i 和 2*i+1 位置上的元素的父节点。
对于一个堆,当父结点的键值总是大于或等于任何一个子节点的键值时,称为最大堆。当父结点的键值总是小于或等于 任何一个子节点的键值时,称为最小堆。
那么,二叉堆需要满足以下两个特性:
1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。
2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆,或都是最小堆)。