export declare abstract class ValueNode { value: T; abstract children: ValueNode[]; abstract isLeaf: boolean; constructor(value: T); /** * @description return the amount of children */ get length(): number; /** * @description children indexer * @param index 0-based index of child */ get(index: number): ValueNode | undefined; } export declare class TreeNode extends ValueNode { protected __children: TreeNode[]; get children(): TreeNode[]; get size(): number; get isLeaf(): boolean; constructor(value: T, ...childrenNodes: TreeNode[]); add(value: T): TreeNode; remove(value: T, comparer?: (item: TreeNode, index: number) => boolean): TreeNode | undefined; removeAt(index: number): TreeNode | undefined; find(value: T, comparer?: (item: TreeNode, index: number) => boolean): TreeNode | undefined; } export declare abstract class BaseTree { abstract root: ValueNode; protected __comp: (a: T, b: T) => number; constructor(comparer?: (a: T, b: T) => number); empty(): boolean; clear(): void; abstract find(value: T): ValueNode | undefined; get comparer(): (a: T, b: T) => number; /** * @description it calls levelOrder from root, and returns it's result with empty callback. */ depth(): number; preOrderEnumerator(node?: ValueNode): Generator, number, unknown>; preOrderIterator(node?: ValueNode): IterableIterator>; /** * @description it's an extended breadthSearch with a tree node level value * @param node root node to calculate level order * @param callback a function called for every tree node with it's level 1-based */ levelOrderEnumerator(node?: ValueNode): Generator<{ node: ValueNode; level: number; }, number, unknown>; postOrderEnumerator(node?: ValueNode): Generator, number, unknown>; breathSearchEnumerator(node?: ValueNode): Generator, number, unknown>; } export declare class Tree extends BaseTree { root: TreeNode; /** * @description implements a breadth search * @param value value to search */ find(value: T): TreeNode | undefined; constructor(root: TreeNode, comparer?: (a: T, b: T) => number); }