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