/** * 二叉搜索树 * @filename: Tree/BinarySearchTree/BinarySearchTree.ts * @author: Mr Prince * @date: 2022-06-28 11:14:06 */ /// import { Compare } from '../../../types'; import TreeNode from './TreeNode'; declare class BinarySearchTree { private compare; /** * 根节点 */ private root; /** * 节点个数 */ private count; /** * 比较器类型错误 */ static readonly CompareInvalidError: { new (message?: string): { name: string; message: string; stack?: string | undefined; }; captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void; prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; stackTraceLimit: number; }; /** * 重复value */ static readonly DuplicateValueError: { new (message?: string): { name: string; message: string; stack?: string | undefined; }; captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void; prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; stackTraceLimit: number; }; /** * @param compare 比较器, 比较节点大小 * @param list 初始节点 */ constructor(compare: Compare, list?: [K, V][]); /** * 添加到二叉搜索树中 */ append(key: K, value: V): void; /** * 添加节点 */ private appendNode; /** * 删除节点 * 如果要删除的是根节点 */ remove(key: K): boolean; /** * 移除节点 */ private removeNode; /** * 获取最小值 */ getMin(): V | undefined; /** * 节点个数 */ getSize(): number; getMax(): V | undefined; has(key: K): boolean; private hasValue; find(key: K): V | undefined; private findValue; clear(): void; /** * 是否为空 */ isEmpty(): boolean; /** * 是否非空 */ isNotEmpty(): boolean; inorderTraversal(callback: (value: V, key: K) => void): void; private inorderTraversalImpl; preorderTraversal(callback: (value: V, key: K) => void): void; private preorderTraversalImpl; postorderTraversal(callback: (value: V, key: K) => void): void; private postorderTraversalImpl; /** * 小于或等于指定值的最大值 * @param includeEqual 是否包含指定值 */ lowerBound(key: K, includeEqual?: boolean): V | undefined; /** * 小于或等于指定值的最大值 */ private lowerBoundImpl; /** * 大于或等于指定值的最小值 * @param includeEqual 是否包含指定值 */ upperBound(key: K, includeEqual?: boolean): V | undefined; /** * 大于或等于指定值的最小值 * @param includeEqual 是否包含指定值 */ upperBoundImpl(node: TreeNode | null, key: K, includeEqual?: boolean): V | undefined; /** * 小于等于 key 的 */ floor(key: K): V | undefined; /** * 大于等于 key 的 */ ceil(key: K): V | undefined; toArray(): [K, V][]; } export default BinarySearchTree;