堆是什么?
它是一种树形组织,使我们能迅速确定包含最大值(或最小值)的结点。
具体来说,堆是一颗左平衡的二叉树。随着结点的增加,树会逐级从左到右增长。
(左平衡是指,如果一棵平衡树的最后一层的所有叶子结点都在最靠左边的位置上,则称这棵树是左平衡的。)
顺序特点
堆状态的二叉树是“局部有序”的,任何一个结点与其兄弟结点之间都没有必然的顺序关系,但它与其父子结点有大小顺序关系。
堆的分类
最大值堆:子结点比父结点小,根结点是树中最大的结点。
最小值堆:子结点比父结点大,根结点是树中最小的结点。
表示方式
对于堆来讲,比较好的表示左平衡二叉树的方式是,将结点通过“层级(水平)遍历”的方式连续存储到一个数组中。
假设i是树中的某一结点,
其父结点位于(i-1)/2处(忽略小树部分);
左子结点位于2i+1处;
右子结点位于2i+2处;
这样的组织结构或方式对于堆来说非常重要,通过它我们能迅速定义堆的最后一个结点,最后一个结点指处于树中最深层最右端的结点。