import { AbstractBinaryTreeNodeProperties, AbstractBinaryTreeNodeProperty, BinaryTreeDeletedResult, BinaryTreeNodeId, BinaryTreeNodePropertyName, DFSOrderPattern, FamilyPosition, LoopType, NodeOrPropertyName } from '../types'; import {AbstractBinaryTreeNode} from '../data-structures'; export interface IAbstractBinaryTreeNode> { get id(): BinaryTreeNodeId set id(v: BinaryTreeNodeId) get val(): T | undefined set val(v: T | undefined) get left(): NEIGHBOR | null | undefined set left(v: NEIGHBOR | null | undefined) get right(): NEIGHBOR | null | undefined set right(v: NEIGHBOR | null | undefined) get parent(): NEIGHBOR | null | undefined set parent(v: NEIGHBOR | null | undefined) get familyPosition(): FamilyPosition get height(): number set height(v: number) } export interface IAbstractBinaryTree> { createNode(id: BinaryTreeNodeId, val?: N['val'], count?: number): N | null get loopType(): LoopType get visitedId(): BinaryTreeNodeId[] get visitedVal(): Array get visitedNode(): N[] get visitedLeftSum(): number[] get root(): N | null get size(): number swapLocation(srcNode: N, destNode: N): N clear(): void isEmpty(): boolean add(id: BinaryTreeNodeId | N, val?: N['val']): N | null | undefined addMany(idsOrNodes: (BinaryTreeNodeId | N | null)[], data?: N['val'][]): (N | null | undefined)[] fill(idsOrNodes: (BinaryTreeNodeId | N | null)[], data?: N[] | Array): boolean remove(id: BinaryTreeNodeId, ignoreCount?: boolean): BinaryTreeDeletedResult[] getDepth(node: N): number getHeight(beginRoot?: N | null): number getMinHeight(beginRoot?: N | null): number isPerfectlyBalanced(beginRoot?: N | null): boolean getNodes(nodeProperty: BinaryTreeNodeId | N, propertyName ?: BinaryTreeNodePropertyName, onlyOne ?: boolean): N[] has(nodeProperty: BinaryTreeNodeId | N, propertyName ?: BinaryTreeNodePropertyName): boolean get(nodeProperty: BinaryTreeNodeId | N, propertyName ?: BinaryTreeNodePropertyName): N | null getPathToRoot(node: N): N[] getLeftMost(): N | null; getLeftMost(node: N): N; getLeftMost(node?: N | null): N | null getRightMost(): N | null; getRightMost(node: N): N; getRightMost(node?: N | null): N | null isSubtreeBST(node: N | null): boolean isBST(): boolean getSubTreeSize(subTreeRoot: N | null | undefined): number // --- start additional methods --- subTreeSum(subTreeRoot: N, propertyName ?: BinaryTreeNodePropertyName): number subTreeAdd(subTreeRoot: N, delta: number, propertyName ?: BinaryTreeNodePropertyName): boolean BFS(): BinaryTreeNodeId[]; BFS(nodeOrPropertyName: 'id'): BinaryTreeNodeId[]; BFS(nodeOrPropertyName: 'val'): N['val'][]; BFS(nodeOrPropertyName: 'node'): N[]; BFS(nodeOrPropertyName: 'count'): number[]; BFS(nodeOrPropertyName ?: NodeOrPropertyName): AbstractBinaryTreeNodeProperties DFS(): BinaryTreeNodeId[]; DFS(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'id'): BinaryTreeNodeId[]; DFS(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'val'): N[]; DFS(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'node'): N[]; DFS(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'count'): number[]; DFS(pattern ?: 'in' | 'pre' | 'post', nodeOrPropertyName ?: NodeOrPropertyName): AbstractBinaryTreeNodeProperties DFSIterative(): BinaryTreeNodeId[]; DFSIterative(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'id'): BinaryTreeNodeId[]; DFSIterative(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'val'): N[]; DFSIterative(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'node'): N[]; DFSIterative(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'count'): number[]; DFSIterative(pattern ?: 'in' | 'pre' | 'post', nodeOrPropertyName ?: NodeOrPropertyName): AbstractBinaryTreeNodeProperties levelIterative(node: N | null): BinaryTreeNodeId[]; levelIterative(node: N | null, nodeOrPropertyName?: 'id'): BinaryTreeNodeId[]; levelIterative(node: N | null, nodeOrPropertyName?: 'val'): N['val'][]; levelIterative(node: N | null, nodeOrPropertyName?: 'node'): N[]; levelIterative(node: N | null, nodeOrPropertyName?: 'count'): number[]; levelIterative(node: N | null, nodeOrPropertyName ?: NodeOrPropertyName): AbstractBinaryTreeNodeProperties listLevels(node: N | null): BinaryTreeNodeId[][]; listLevels(node: N | null, nodeOrPropertyName?: 'id'): BinaryTreeNodeId[][]; listLevels(node: N | null, nodeOrPropertyName?: 'val'): N['val'][][]; listLevels(node: N | null, nodeOrPropertyName?: 'node'): N[][]; listLevels(node: N | null, nodeOrPropertyName?: 'count'): number[][]; listLevels(node: N | null, nodeOrPropertyName?: NodeOrPropertyName): AbstractBinaryTreeNodeProperty[][] getPredecessor(node: N): N morris(): BinaryTreeNodeId[]; morris(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'id'): BinaryTreeNodeId[]; morris(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'val'): N[]; morris(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'node'): N[]; morris(pattern?: DFSOrderPattern, nodeOrPropertyName?: 'count'): number[]; morris(pattern?: 'in' | 'pre' | 'post', nodeOrPropertyName?: NodeOrPropertyName): AbstractBinaryTreeNodeProperties // --- end additional methods --- }