那么,什么是堆呢?
这里,必须引入一个完全二叉树的概念,然后过渡到堆的概念。
上图,就是一个完全二叉树,其特点在于:
从作为第一层的根开始,除了最后一层之外,第N层的元素个数都必须是2的N次方;
第一层2个元素,第二层4个,第三层8个,以此类推。而最后一行的元素,都要紧贴在左边。
总结:第一层的根开始,除了最后一层之外,第N层的元素个数都必须是2的N次方,每一行的元素都从最左边开始安放,两个元素之间不能有空闲,具备了这两个特点的树,就是一棵完全二叉树。
那么,完全二叉树与堆有什么关系呢?
首先堆必须完全满足上述数据结构,作为完全二叉树的基础上,其次对于任意一个拥有父节点的子节点,其数值均不小于/大于父节点的值称为堆。
如图,堆分为大根堆和小根堆 大根堆:一棵完全二叉树,对于任意一个子节点来说,均不大于其父节点的值,如此递推,就是根节点的值是最大的,这样的数,称为大根堆。 小根堆:反之小根堆。
明确下大根堆,小根堆的概念,继续说堆排序。
父子节点关系
父:n。
左子:2n+1。
右子:2n+2。