dastal
Version:
Data Structures & Algorithms implementations
95 lines (94 loc) • 3.62 kB
TypeScript
import { CompareFn } from '..';
import { AATreeNode } from './aaTreeNode';
import { Edge } from './binaryTreeUtils';
import { SortedTree } from './sortedTree';
import { LinkedNode } from 'src/list';
/**
* An AA tree is a form of balanced tree used for storing and retrieving ordered data efficiently
* ([source](https://en.wikipedia.org/wiki/AA_tree)).
*
* AA trees are named for Arne Andersson, their inventor. They are a variation of the red–black tree,
* which supports efficient addition and deletion of entries. Unlike red–black trees, additional
* constraints on the balancing mechanism greatly simplifies the implementation as well as
* maintenance operations; While a red–black tree needs to consider seven different shapes
* to properly balance the tree, an AA tree only needs to consider two shapes.
*
* The performance of an AA tree is equivalent to the performance of a red–black tree.
* While an AA tree makes more rotations than a red-black tree, the simpler algorithms
* tend to be faster, which balances out to similar performance. A red-black tree is
* more consistent in its performance, but an AA tree tends to be flatter, which results
* in slightly faster search times.
*/
export declare class AATree<T> implements SortedTree<T> {
/**
* The function to determine the order of elements.
*/
protected compare: CompareFn<T>;
/**
* Indicates how to handle duplicates:
* - < 0 : Add to left subtree
* - = 0 : Do now allow duplicates
* - > 0 : Add to right subtree
*/
protected dupeWeight: number;
/**
* The number of elements in the list.
*/
protected length: number;
/**
* The node at the "top" of the heap.
*/
protected root: AATreeNode<T> | undefined;
/**
* Instantiate a tree.
*
* @param compareFn - The function to determine the order of elements.
* @param elements - A set of elements to initialize the tree with.
*/
constructor(compareFn: CompareFn<T>, elements?: Iterable<T>);
/**
* Instantiate a tree.
*
* @param compareFn - The function to determine the order of elements.
* @param allowDuplicates - Whether to allow duplicates
* @param elements - A set of elements to initialize the tree with.
*/
constructor(compareFn: CompareFn<T>, allowDuplicates: boolean, elements?: Iterable<T>);
add(element: T): this;
clear(): void;
comparator(): CompareFn<T>;
delete(element: T): boolean;
has(element: T): boolean;
max(): T | undefined;
min(): T | undefined;
pop(): T | undefined;
shift(): T | undefined;
get size(): number;
sorted(): Iterable<T>;
/**
* Receive an iterator through the list.
*
* **Note:** Unexpected behavior can occur if the collection is modified during iteration.
*
* @returns An iterator through the list
*/
[Symbol.iterator](): Iterator<T>;
update(curElement: T, newElement: T): boolean;
protected build(obj: Iterable<T>): void;
}
/**
* @internal
*/
export declare function remove<T>(stack: LinkedNode<Edge<AATreeNode<T>>>): boolean;
/**
* @internal
*/
export declare function skew<T>(node?: undefined): undefined;
export declare function skew<T>(node: AATreeNode<T>): AATreeNode<T>;
export declare function skew<T>(node?: AATreeNode<T>): AATreeNode<T> | undefined;
/**
* @internal
*/
export declare function split<T>(node?: undefined): undefined;
export declare function split<T>(node: AATreeNode<T>): AATreeNode<T>;
export declare function split<T>(node?: AATreeNode<T>): AATreeNode<T> | undefined;