/**
* 小顶堆
* compare返回值取个相反数就是大顶堆
* @filename: Heap.ts
* @author: Mr Prince
* @date: 2021-07-13 09:02:21
*/
///
/**
* @public
*/
declare class Heap {
private heap;
private compare;
static readonly CompareInvalidError: {
new (message?: string): {
name: string;
message: string;
stack?: string | undefined;
};
captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void;
prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined;
stackTraceLimit: number;
};
static readonly HeapEmptyError: {
new (message?: string): {
name: string;
message: string;
stack?: string | undefined;
};
captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void;
prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined;
stackTraceLimit: number;
};
/**
* @param compare - 比较函数
* @param arr - 初始数据,需要注意不要再继续使用这个数组了
*/
constructor(compare: (a: T, b: T) => number, arr?: T[]);
/**
* 根据初始数据建堆
*/
private buildHeap;
/**
* 下沉操作调整堆
* 类似数组移位,把要移动的数据移出来,找到第一个不满足要求的数据的位置,填入
*/
private shiftDown;
/**
* 上浮操作调整堆
*/
private shiftUp;
/**
* 获取堆大小
*/
get size(): number;
/**
* 是否为空
*/
isEmpty(): boolean;
/**
* 是否非空
* @description 使用过程中经常会用到非空判断,就给它加上了
*/
isNotEmpty(): boolean;
/**
* 获取顶点值
*/
peak(): T;
/**
* 获取堆顶元素并移除
*/
pool(): T;
/**
* 插入节点
*/
insert(value: T): void;
/**
* 移除顶点
*/
remove(): T;
/**
* 替换顶点
* @description 限制堆大小的情况下,经常会有一下两种情况
* 1. 先remove后insert
* 2. 先insert后remove的操作
* 其实完全可以通过一步操作来实现
* 所以添加了这样一个 replaceTop 方法
*/
replaceTop(value: T): void;
/**
* 清空堆
*/
clear(): void;
/**
* 获取当前heap内容
*/
toArray(): T[];
}
export default Heap;