堆结构
堆或二叉堆是基于完全二叉树的一种数据结构,通常以数组表示。假设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代码 #
- Previous: 206. Reverse Linked List