UNPKG

dastal

Version:

Data Structures & Algorithms implementations

106 lines (105 loc) 4.15 kB
import { LinkedNode } from 'src/list'; import { CompareFn } from '..'; import { BinaryTreeNode } from './binaryTreeNode'; /** * @internal */ export interface Edge<Node extends BinaryTreeNode<unknown>> { label?: 'left' | 'right'; from?: Node; to?: Node; } /** * [source](https://stackoverflow.com/questions/51419176/how-to-get-a-subset-of-keyof-t-whose-value-tk-are-callable-functions-in-typ) * * @internal * export type KeyOfType<T, U> = {[K in keyof T]: T[K] extends U ? K: never}[keyof T]; */ /** * @internal */ export declare function debug<N extends BinaryTreeNode<T>, T = any>(root: N | undefined, mapFn?: (node: N) => any): void; /** * @internal */ export declare function removeStack<Node extends BinaryTreeNode<unknown>>(stack: LinkedNode<Edge<Node>>, dir?: boolean): LinkedNode<Edge<Node>>; /** * @internal */ export declare function clone<T, Node extends BinaryTreeNode<T>>(node: undefined): undefined; export declare function clone<T, Node extends BinaryTreeNode<T>>(node: Node): Node; export declare function clone<T, Node extends BinaryTreeNode<T>>(node: Node | undefined): Node | undefined; /** * @internal */ export declare function leftmost<Node extends BinaryTreeNode<unknown>>(node: undefined): undefined; export declare function leftmost<Node extends BinaryTreeNode<unknown>>(node: Node): Node; export declare function leftmost<Node extends BinaryTreeNode<unknown>>(node: Node | undefined): Node | undefined; /** * @internal */ export declare function leftmostStack<Node extends BinaryTreeNode<unknown>>(stack: LinkedNode<Edge<Node>>): LinkedNode<Edge<Node>>; /** * @internal */ export declare function inOrderTraverse<T, Node extends BinaryTreeNode<T>>(node: Node | undefined): Generator<Node>; /** * @internal */ export declare function levelOrderTraverse<T, Node extends BinaryTreeNode<T>>(node: Node | undefined, padded?: false): Generator<Node>; export declare function levelOrderTraverse<T, Node extends BinaryTreeNode<T>>(node: Node | undefined, padded: true): Generator<Node | undefined>; /** * @internal */ export declare function postOrderTraverse<T, Node extends BinaryTreeNode<T>>(node: Node | undefined): Generator<Node>; /** * @internal */ export declare function predecessor<Node extends BinaryTreeNode<unknown>>(node: Node | undefined): Node | undefined; /** * @internal */ export declare function predecessorStack<Node extends BinaryTreeNode<unknown>>(stack: LinkedNode<Edge<Node>>): LinkedNode<Edge<Node>>; /** * @internal */ export declare function preOrderTraverse<T, Node extends BinaryTreeNode<T>>(node: Node | undefined): Generator<Node>; /** * @internal */ export declare function reverse<Node extends BinaryTreeNode<unknown>>(root?: Node): void; /** * @internal */ export declare function rightmost<Node extends BinaryTreeNode<unknown>>(node: undefined): undefined; export declare function rightmost<Node extends BinaryTreeNode<unknown>>(node: Node): Node; export declare function rightmost<Node extends BinaryTreeNode<unknown>>(node: Node | undefined): Node | undefined; /** * @internal */ export declare function rightmostStack<Node extends BinaryTreeNode<unknown>>(stack: LinkedNode<Edge<Node>>): LinkedNode<Edge<Node>>; /** * Assumes sorted by compareFn * @internal */ export declare function search<T, Node extends BinaryTreeNode<T>>(element: T, node: Node | undefined, compareFn: CompareFn<T>): Node | undefined; /** * Assumes sorted by compareFn * @internal */ export declare function searchStack<T, Node extends BinaryTreeNode<T>>(element: T, stack: LinkedNode<Edge<Node>>, compareFn: CompareFn<T>, dupeWeight?: number): LinkedNode<Edge<Node>>; /** * @internal */ export declare function successor<Node extends BinaryTreeNode<unknown>>(node: Node | undefined): Node | undefined; /** * @internal */ export declare function successorStack<Node extends BinaryTreeNode<unknown>>(stack: LinkedNode<Edge<Node>>): LinkedNode<Edge<Node>>; /** * Turn an array into a binary tree. Assumes elements are in level-order. * * @internal */ export declare function toBinaryTree<T>(elements: (T | undefined)[] | undefined): BinaryTreeNode<T> | undefined;