Skip to main content
查利博客

堆结构

堆或二叉堆是基于完全二叉树的一种数据结构,通常以数组表示。假设Arr是数组,根节点则是Arr[0]

节点i和数组索引有以下公式:

Arr[(i-1)/2] 返回父节点
Arr[(2*i)+1] 返回左孩子节点
Arr[(2*i)+2] 返回右孩子节点

层次遍历可分为两种,分别是小堆和大堆:

小堆:每一个节点的值都大于或等于父节点,最小值在根节点

大堆:每一个节点的值都小于或等于父节点,最大值在根节点

问题:如果一个数组大小为N,如何构建一个二叉堆?

观察1: 叶子节点不需要堆化

观察2: 最后一个非叶子节点是最后一个节点的父节点,根据上面公式1,最后一个非叶子节点的索引是N/2-1

Java代码 #

C代码 #