UNPKG

@drozdik.m/avl-tree

Version:

Classic implementation of AVL tree with improvements like efficient search of nth item and iterator.

116 lines (115 loc) 4.55 kB
import { IIterableBidirectionaly } from "@drozdik.m/common-interfaces/IIterableBidirectionaly"; import { IClonable } from "@drozdik.m/common-interfaces/IClonable"; import { IContainer } from "@drozdik.m/common-interfaces/IContainer"; import { ICountable } from "@drozdik.m/common-interfaces/ICountable"; import { IClearable } from "@drozdik.m/common-interfaces/IClearable"; import { IDisposable } from "@drozdik.m/common-interfaces/IDisposable"; import { IBidirectionalySearchableContainer } from "@drozdik.m/common-interfaces/IBidirectionalySearchableContainer"; import { IRemovableContainerByIterator } from "@drozdik.m/common-interfaces/IRemovableContainerByIterator"; import { IUpdatableContainerByIterator } from "@drozdik.m/common-interfaces/IUpdatableContainerByIterator"; import { IRandomAccessibleIterable } from "@drozdik.m/common-interfaces/IRandomAccessibleIterable"; import { IComparator } from "@drozdik.m/common-interfaces/IComparator"; import { IBuildable } from "@drozdik.m/common-interfaces/IBuildable"; import { AVLTreeNode } from "./AVLTreeNode"; import { AVLTreeIterator } from "./AVLTreeIterator"; export declare class AVLTree<T> implements IIterableBidirectionaly<T>, IClonable<AVLTree<T>>, IContainer<T>, ICountable, IClearable, IDisposable, IBidirectionalySearchableContainer<T>, IRemovableContainerByIterator<T>, IUpdatableContainerByIterator<T>, IRandomAccessibleIterable<T>, IBuildable<T> { private comparator; private root; /** * Creates new instance of the object. * @param items Initial items in the binary search tree. * @param comparator Comparator - It automatically detects IComparable classes. */ constructor(items?: T[], comparator?: IComparator<T>); Insert(item: T): void; /** * Recursive insert method * @param value Value to insert * @param node Current node */ private InsertRec; Find(item: T): AVLTreeIterator<T>; /** * Return node by inserted value * @param item */ private FindNode; /** * Recursive function for searching * @param value Value * @param node Current/Initial node */ private FindRec; RemoveAt(iterator: AVLTreeIterator<T>): void; Remove(item: T): void; /** * Recursive function sor deleting * @param value Value to delete * @param node Current node/Initial node */ private DeleteRec; UpdateAt(newValue: T, iterator: AVLTreeIterator<T>): void; Update(oldValue: T, newValue: T): void; At(index: number): T; AtIterator(index: number): AVLTreeIterator<T>; /** * Recursive function for finding nth index * @param index Index * @param node Initial/Current node */ private AtRec; FindMin(): AVLTreeIterator<T>; private FindMinRec; FindMax(): AVLTreeIterator<T>; private FindMaxRec; Dispose(): void; Clear(): void; First(): AVLTreeIterator<T>; Last(): AVLTreeIterator<T>; Clone(): AVLTree<T>; /** * Recursive clone function that clones nodes * @param node Root/Current node * @param parent Nodes parent node */ private CloneRec; Build(items: T[]): void; Count(): number; IsEmpty(): boolean; /** * Rotate a node in left direction * @param x Node to rotate around * @returns Higher node in tree hierarchy */ protected RotateLeft(x: AVLTreeNode<T>): AVLTreeNode<T>; /** * Rotate a node in right direction * @param y Node to rotate around * @returns Higher node in tree hierarchy */ protected RotateRight(y: AVLTreeNode<T>): AVLTreeNode<T>; /** * Rotate a node to left and right * @param x Node to rotate around * @returns Higher node in tree hierarchy */ protected RotateLeftRight(x: AVLTreeNode<T>): AVLTreeNode<T>; /** * Rotate a node to right and left * @param x Node to rotate around * @returns Higher node in tree hierarchy */ protected RotateRightLeft(x: AVLTreeNode<T>): AVLTreeNode<T>; /** * Rotates the node if needed. * @param node Node to check * @returns Higher node in tree hierarchy */ protected RotateAdvisorInsert(node: AVLTreeNode<T>): AVLTreeNode<T>; /** * Rotates the node if needed. * @param node Node to check * @returns Higher node in tree hierarchy */ protected RotateAdvisorDelete(node: AVLTreeNode<T>): AVLTreeNode<T>; }