export type Node = { parent?: Node, left?: Node, right?: Node, balanceFactor: number, key?: Key, data?: Value }; export type Comparator = (a: Key, b: Key) => number export type ForEachCallback = (node: Node, index: number) => void export type TraverseCallback = (node: Node) => (void | boolean) export default class SplayTree { constructor (comparator?: Comparator, noDuplicates?: boolean); size: number; insert(key: Key, data?: Value): Node; remove(key: Key): boolean; removeNode(node: Node): boolean; find(key: Key): Node; at(index: number): Node; contains(key: Key): boolean; isEmpty(): boolean; keys(): Array; values(): Array; range(minKey:Key, maxKey:Key, visit:TraverseCallback, context?:any); pop(): Node; min(): Key; max(): Key; minNode(): Node; maxNode(): Node; forEach(callback: ForEachCallback): SplayTree; load(keys: Array, values?:Array, presort?:Boolean): SplayTree; prev(node: Node): Node; next(node: Node): Node; isBalanced(): boolean; toString(): string; destroy(): SplayTree; static createTree(keys: Array, values?:Array, comparator?: Comparator, presort?:Boolean, noDuplicates?: boolean):SplayTree }