SplHeap
简介
堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
- 堆中某个节点的值总是不大于或者不小于期父节点的值。
- 堆总是一颗完全二叉树
有人会问 什么是 完全二叉树?首先你得知道什么是满二叉树。满二叉树的定义是:“除了最后一层无任何子节点外,每一层上的所有的节点都有两个子节点的二叉树叫满二叉树。”请注意,如果一棵树的层级为n,n-1层的节点都必须有两个子节点,才能被称为满二叉树。
完全二叉树的定义是:一颗深度为k的有n个节点的二叉树,对树中的节点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n) 的节点与满二叉树中编号为i的节点在二叉树中位置相同,则这棵树成为完全二叉树。
回归正题,我们这里介绍的类是一个抽象类,实现了Iterator , Countable接口,后面要介绍的最大堆(SplMaxHeap)和最小堆(SplMinHeap)就是继承他实现的。
abstract class SplHeap implements Iterator, Countable {
/**
* [extract description] 从堆顶部提取一个节点并重建堆
* @return [type] [description]
*/
public function extract () {}
/**
* [insert description] 向堆中增加一个节点并重建堆
* @param [type] $value [description]
* @return [type] [description]
*/
public function insert ($value) {}
/**
* [top description] 返回堆顶部的节点
* @return [type] [description]
*/
public function top () {}
/**
* [count description] 返回堆中元素个数
* @return [type] [description]
*/
public function count () {}
/**
* [isEmpty description] 判断是不是空堆
* @return boolean [description]
*/
public function isEmpty () {}
/**
* [rewind description] 重置迭代指针
* @return [type] [description]
*/
public function rewind () {}
/**
* [current description] 返回当前迭代指针指向的节点
* @return [type] [description]
*/
public function current () {}
/**
* [key description] 返回当前迭代指针指向的键
* @return [type] [description]
*/
public function key () {}
/**
* [next description] 迭代指针到下一个节点
* @return function [description]
*/
public function next () {}
/**
* [valid description] 判断当前指针指向的节点是否存在
* @return [type] [description]
*/
public function valid () {}
/**
* [recoverFromCorruption description] 恢复堆
* @return [type] [description]
*/
public function recoverFromCorruption () {}
/**
* [compare description] 抽象方法 比较两个节点的大小(子类继承中必须实现)
* @param [type] $value1 [description]
* @param [type] $value2 [description]
* @return [type] [description]
*/
abstract protected function compare ($value1, $value2);
/**
* [isCorrupted description] 判断堆结构是否被破坏了
* @return boolean [description]
*/
public function isCorrupted(){}
}
上面介绍的方法中只有compare是抽象方法,后面我们介绍的最大堆和最小堆就是重写此方法实现的。