apply-hooks
Version:
A high-quality & reliable JavaScript Hooks library.
68 lines (67 loc) • 1.75 kB
TypeScript
/**
* insert(key) 向树中插入一个新的键
* search(key) 在树中找一个键
* inOrderTraverse 通过中序遍历所有的节点并且返回
* preOrderTraverse 通过前序遍历所有的节点并且返回
* postOrderTraverse 通过后序遍历所有的节点并且返回
* min 返回节点中的最小值
* max 返回节点中的最大值
* remove(key) 从树中移除某个键
*/
interface IInsert<T> {
(value: T): boolean;
}
interface ISearch<T> {
(key: number): T | boolean;
}
interface IInOrderTraverse<T> {
(cb: (value: T) => void): void;
}
interface IPreOrderTraverse<T> {
(cb: (value: T) => void): void;
}
interface IPostOrderTraverse<T> {
(cb: (value: T) => void): void;
}
interface ISequenceOrderTraverse<T> {
(cb: (value: T) => void): void;
}
interface IMin<T> {
(child: Node<T>): T | boolean;
}
interface IMax<T> {
(child: Node<T>): T | boolean;
}
interface IIsEmpty {
(): boolean;
}
interface ISize {
(): number;
}
interface IRemove<T> {
(key: number): T | boolean;
}
interface IToKeysArray<T> {
(traverse: ISequenceOrderTraverse<T>): number[];
}
declare class Node<T> {
value: T;
left: Node<T> | null;
right: Node<T> | null;
constructor(value: T, left?: Node<T> | null, right?: Node<T> | null);
}
declare const useBinarySearchTree: <T>(data?: T[]) => {
insert: IInsert<T>;
search: ISearch<T>;
inOrderTraverse: IInOrderTraverse<T>;
preOrderTraverse: IPreOrderTraverse<T>;
postOrderTraverse: IPostOrderTraverse<T>;
sequenceOrderTraverse: ISequenceOrderTraverse<T>;
min: IMin<T>;
max: IMax<T>;
remove: IRemove<T>;
isEmpty: IIsEmpty;
size: ISize;
toKeysArray: IToKeysArray<T>;
};
export default useBinarySearchTree;