export declare type Dir = 'left' | 'right'; export interface ITreeNode { data: T; parent?: ITreeNode; left?: ITreeNode; right?: ITreeNode; level?: number; balance?: number; red?: boolean; [dir: string]: ITreeNode | T | number | boolean; } export default class Tree { protected __root: ITreeNode; constructor(cmp?: (a: T, b: T) => number); compare: (a: T, b: T) => number; get_root(): ITreeNode; set_root(root: ITreeNode): void; insert(data: T): void; remove(data: T): void; clear(): void; isEmpty(): boolean; print(): void; /** * Prints a node * @param node node to print * @param level the current level the node is at, Used for formatting */ __printNode(node: ITreeNode, level: number): void; forEach(cb: (data: T, tree: Tree) => void, order: string): void; traverse(node: ITreeNode, order?: string, callback?: (data: T) => void): void; traverseWithCondition(node: ITreeNode, order?: string, callback?: (data: T) => boolean): boolean; map(cb: (data: T, tree: Tree) => T, order: string): Tree; filter(cb: (data: T, tree: Tree) => boolean, order: string): Tree; some(cb: (data: T, tree: Tree) => boolean, order: string): boolean; every(cb: (data: T, tree: Tree) => boolean, order: string): boolean; toArray(order?: string): T[]; reduce(fun: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, accumulator?: T, order?: string): T; reduce(fun: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, accumulator?: U, order?: string): U; reduceRight(fun: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, accumulator?: T, order?: string): T; reduceRight(fun: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => T, accumulator?: U, order?: string): U; contains(value: T): boolean; find(value: T): T; findLessThan(value: T, exclusive?: boolean): T[]; findGreaterThan(value: T, exclusive?: boolean): T[]; }