data-structure-typed 1.53.8 → 1.53.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/CONTRIBUTING.md +1 -1
- package/dist/cjs/data-structures/base/iterable-entry-base.js +4 -4
- package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +36 -17
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +64 -35
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +12 -8
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +19 -6
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +53 -40
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +75 -71
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +35 -30
- package/dist/cjs/data-structures/binary-tree/bst.js +54 -40
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +43 -22
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js +50 -55
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +33 -17
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +62 -36
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.js +2 -2
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +1 -1
- package/dist/cjs/data-structures/hash/hash-map.js +5 -5
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +10 -10
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +12 -12
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +10 -10
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +16 -16
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +3 -4
- package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
- package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -3
- package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -3
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -3
- package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +3 -4
- package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -5
- package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +4 -5
- package/dist/mjs/data-structures/base/iterable-entry-base.js +4 -4
- package/dist/mjs/data-structures/base/iterable-entry-base.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +36 -17
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +64 -35
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +12 -8
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +19 -6
- package/dist/mjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +53 -40
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +75 -71
- package/dist/mjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +35 -30
- package/dist/mjs/data-structures/binary-tree/bst.js +70 -56
- package/dist/mjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/red-black-tree.d.ts +43 -22
- package/dist/mjs/data-structures/binary-tree/red-black-tree.js +50 -55
- package/dist/mjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +33 -17
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +62 -36
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/mjs/data-structures/graph/abstract-graph.js +2 -2
- package/dist/mjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/mjs/data-structures/hash/hash-map.d.ts +1 -1
- package/dist/mjs/data-structures/hash/hash-map.js +5 -5
- package/dist/mjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +10 -10
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +12 -12
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +10 -10
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js +16 -16
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/mjs/interfaces/binary-tree.d.ts +3 -4
- package/dist/mjs/types/data-structures/base/base.d.ts +1 -1
- package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -3
- package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -3
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -3
- package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +3 -4
- package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -5
- package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +4 -5
- package/dist/umd/data-structure-typed.js +337 -253
- package/dist/umd/data-structure-typed.min.js +3 -3
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +6 -6
- package/src/data-structures/base/iterable-entry-base.ts +4 -4
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +81 -54
- package/src/data-structures/binary-tree/avl-tree.ts +32 -15
- package/src/data-structures/binary-tree/binary-tree.ts +88 -83
- package/src/data-structures/binary-tree/bst.ts +87 -74
- package/src/data-structures/binary-tree/red-black-tree.ts +55 -54
- package/src/data-structures/binary-tree/tree-multi-map.ts +79 -49
- package/src/data-structures/graph/abstract-graph.ts +2 -2
- package/src/data-structures/hash/hash-map.ts +7 -7
- package/src/data-structures/linked-list/doubly-linked-list.ts +13 -13
- package/src/data-structures/linked-list/singly-linked-list.ts +17 -17
- package/src/interfaces/binary-tree.ts +3 -13
- package/src/types/data-structures/base/base.ts +1 -1
- package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +2 -4
- package/src/types/data-structures/binary-tree/avl-tree.ts +2 -4
- package/src/types/data-structures/binary-tree/binary-tree.ts +3 -3
- package/src/types/data-structures/binary-tree/bst.ts +3 -5
- package/src/types/data-structures/binary-tree/rb-tree.ts +4 -6
- package/src/types/data-structures/binary-tree/tree-multi-map.ts +4 -6
- package/test/integration/index.html +3 -3
- package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +3 -3
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +12 -12
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +10 -10
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +10 -10
- package/test/unit/data-structures/binary-tree/bst.test.ts +11 -11
- package/test/unit/data-structures/binary-tree/data/cost-of-living-by-country.ts +259 -0
- package/test/unit/data-structures/binary-tree/overall.test.ts +2 -0
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +30 -10
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +10 -10
- package/test/unit/data-structures/graph/directed-graph.test.ts +4 -4
- package/test/unit/data-structures/hash/hash-map.test.ts +12 -12
|
@@ -116,6 +116,23 @@ export class SinglyLinkedList<E = any, R = any> extends IterableElementBase<E, R
|
|
|
116
116
|
return this._size;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Time Complexity: O(n)
|
|
121
|
+
* Space Complexity: O(n)
|
|
122
|
+
*
|
|
123
|
+
* The `fromArray` function creates a new SinglyLinkedList instance and populates it with the elements from the given
|
|
124
|
+
* array.
|
|
125
|
+
* @param {E[]} data - The `data` parameter is an array of elements of type `E`.
|
|
126
|
+
* @returns The `fromArray` function returns a `SinglyLinkedList` object.
|
|
127
|
+
*/
|
|
128
|
+
static fromArray<E>(data: E[]) {
|
|
129
|
+
const singlyLinkedList = new SinglyLinkedList<E>();
|
|
130
|
+
for (const item of data) {
|
|
131
|
+
singlyLinkedList.push(item);
|
|
132
|
+
}
|
|
133
|
+
return singlyLinkedList;
|
|
134
|
+
}
|
|
135
|
+
|
|
119
136
|
/**
|
|
120
137
|
* Time Complexity: O(1)
|
|
121
138
|
* Space Complexity: O(1)
|
|
@@ -763,23 +780,6 @@ export class SinglyLinkedList<E = any, R = any> extends IterableElementBase<E, R
|
|
|
763
780
|
}
|
|
764
781
|
}
|
|
765
782
|
|
|
766
|
-
/**
|
|
767
|
-
* Time Complexity: O(n)
|
|
768
|
-
* Space Complexity: O(n)
|
|
769
|
-
*
|
|
770
|
-
* The `fromArray` function creates a new SinglyLinkedList instance and populates it with the elements from the given
|
|
771
|
-
* array.
|
|
772
|
-
* @param {E[]} data - The `data` parameter is an array of elements of type `E`.
|
|
773
|
-
* @returns The `fromArray` function returns a `SinglyLinkedList` object.
|
|
774
|
-
*/
|
|
775
|
-
static fromArray<E>(data: E[]) {
|
|
776
|
-
const singlyLinkedList = new SinglyLinkedList<E>();
|
|
777
|
-
for (const item of data) {
|
|
778
|
-
singlyLinkedList.push(item);
|
|
779
|
-
}
|
|
780
|
-
return singlyLinkedList;
|
|
781
|
-
}
|
|
782
|
-
|
|
783
783
|
/**
|
|
784
784
|
* The _isPredicate function in TypeScript checks if the input is a function that takes a
|
|
785
785
|
* SinglyLinkedListNode as an argument and returns a boolean.
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
BinaryTreeDeleteResult,
|
|
4
|
-
BinaryTreeNested,
|
|
5
|
-
BinaryTreeNodeNested,
|
|
6
|
-
BinaryTreeOptions,
|
|
7
|
-
BTNRep,
|
|
8
|
-
NodePredicate
|
|
9
|
-
} from '../types';
|
|
1
|
+
import { BinaryTreeNode } from '../data-structures';
|
|
2
|
+
import type { BinaryTreeDeleteResult, BinaryTreeNodeNested, BTNRep, NodePredicate } from '../types';
|
|
10
3
|
|
|
11
4
|
export interface IBinaryTree<
|
|
12
5
|
K = any,
|
|
13
6
|
V = any,
|
|
14
7
|
R = object,
|
|
15
|
-
NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNodeNested<K, V
|
|
16
|
-
TREE extends BinaryTree<K, V, R, NODE, TREE> = BinaryTreeNested<K, V, R, NODE>
|
|
8
|
+
NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNodeNested<K, V>
|
|
17
9
|
> {
|
|
18
10
|
createNode(key: K, value?: NODE['value']): NODE;
|
|
19
11
|
|
|
20
|
-
createTree(options?: Partial<BinaryTreeOptions<K, V, R>>): TREE;
|
|
21
|
-
|
|
22
12
|
add(keyOrNodeOrEntryOrRawElement: BTNRep<K, V, NODE>, value?: V, count?: number): boolean;
|
|
23
13
|
|
|
24
14
|
addMany(nodes: Iterable<BTNRep<K, V, NODE>>, values?: Iterable<V | undefined>): boolean[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IterableElementBase, IterableEntryBase } from '../../../data-structures';
|
|
2
2
|
|
|
3
|
-
export type EntryCallback<K, V, R> = (
|
|
3
|
+
export type EntryCallback<K, V, R> = (key: K, value: V, index: number, container: IterableEntryBase<K, V>) => R;
|
|
4
4
|
export type ElementCallback<E, R, RT, C> = (element: E, index: number, container: IterableElementBase<E, R, C>) => RT;
|
|
5
5
|
export type ReduceEntryCallback<K, V, R> = (
|
|
6
6
|
accumulator: R,
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AVLTreeMultiMapNode } from '../../../data-structures';
|
|
2
2
|
import type { AVLTreeOptions } from './avl-tree';
|
|
3
3
|
|
|
4
|
-
export type AVLTreeMultiMapNodeNested<K, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V,
|
|
5
|
-
|
|
6
|
-
export type AVLTreeMultiMapNested<K, V, R, NODE extends AVLTreeMultiMapNode<K, V, NODE>> = AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
4
|
+
export type AVLTreeMultiMapNodeNested<K, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, any>>>>>>>>>>
|
|
7
5
|
|
|
8
6
|
export type AVLTreeMultiMapOptions<K, V, R> = AVLTreeOptions<K, V, R> & {}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AVLTreeNode } from '../../../data-structures';
|
|
2
2
|
import { BSTOptions } from './bst';
|
|
3
3
|
|
|
4
|
-
export type AVLTreeNodeNested<K, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V,
|
|
5
|
-
|
|
6
|
-
export type AVLTreeNested<K, V, R, NODE extends AVLTreeNode<K, V, NODE>> = AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
4
|
+
export type AVLTreeNodeNested<K, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, any>>>>>>>>>>
|
|
7
5
|
|
|
8
6
|
export type AVLTreeOptions<K, V, R> = BSTOptions<K, V, R> & {};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BinaryTreeNode } from '../../../data-structures';
|
|
2
2
|
import { IterationType, OptValue } from '../../common';
|
|
3
3
|
import { DFSOperation } from '../../../common';
|
|
4
4
|
|
|
5
|
-
export type BinaryTreeNodeNested<K, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V,
|
|
5
|
+
export type BinaryTreeNodeNested<K, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>
|
|
6
6
|
|
|
7
|
-
export type BinaryTreeNested<K, V, R, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE,
|
|
7
|
+
// export type BinaryTreeNested<K, V, R, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
8
8
|
|
|
9
9
|
export type ToEntryFn<K, V, R> = (rawElement: R) => BTNEntry<K, V>;
|
|
10
10
|
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BSTNode } from '../../../data-structures';
|
|
2
2
|
import type { BinaryTreeOptions } from './binary-tree';
|
|
3
3
|
import { Comparable } from '../../utils';
|
|
4
4
|
|
|
5
|
-
export type BSTNodeNested<K, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V,
|
|
6
|
-
|
|
7
|
-
export type BSTNested<K, V, R, NODE extends BSTNode<K, V, NODE>> = BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
export type BSTNodeNested<K, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>
|
|
8
6
|
|
|
9
7
|
export type BSTOptions<K, V, R> = BinaryTreeOptions<K, V, R> & {
|
|
10
|
-
|
|
8
|
+
specifyComparable?: (key: K) => Comparable
|
|
11
9
|
isReverse?: boolean;
|
|
12
10
|
}
|
|
13
11
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { BSTOptions } from
|
|
1
|
+
import { RedBlackTreeNode } from '../../../data-structures';
|
|
2
|
+
import type { BSTOptions } from './bst';
|
|
3
3
|
|
|
4
4
|
export type RBTNColor = 'RED' | 'BLACK';
|
|
5
5
|
|
|
6
|
-
export type RedBlackTreeNodeNested<K, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V,
|
|
6
|
+
export type RedBlackTreeNodeNested<K, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>
|
|
7
7
|
|
|
8
|
-
export type
|
|
9
|
-
|
|
10
|
-
export type RBTreeOptions<K, V, R> = Omit<BSTOptions<K, V, R>, 'isReverse'> & {};
|
|
8
|
+
export type RedBlackTreeOptions<K, V, R> = Omit<BSTOptions<K, V, R>, 'isReverse'> & {};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
1
|
+
import { TreeMultiMapNode } from '../../../data-structures';
|
|
2
|
+
import type { RedBlackTreeOptions } from './rb-tree';
|
|
3
3
|
|
|
4
|
-
export type TreeMultiMapNodeNested<K, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V,
|
|
4
|
+
export type TreeMultiMapNodeNested<K, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>
|
|
5
5
|
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
export type TreeMultiMapOptions<K, V, R> = RBTreeOptions<K, V, R> & {}
|
|
6
|
+
export type TreeMultiMapOptions<K, V, R> = RedBlackTreeOptions<K, V, R> & {}
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
try {
|
|
103
103
|
const { OrderedMap } = sdsl;
|
|
104
104
|
const { RedBlackTree } = dataStructureTyped;
|
|
105
|
-
const
|
|
105
|
+
const cRedBlackTree = new OrderedMap();
|
|
106
106
|
const rbTree = new RedBlackTree();
|
|
107
107
|
const tS = performance.now();
|
|
108
108
|
const n = 100000;
|
|
@@ -117,10 +117,10 @@
|
|
|
117
117
|
rbTree.print(rbTree.root, { isShowRedBlackNIL: true });
|
|
118
118
|
const cS = performance.now();
|
|
119
119
|
for (let i = 1; i < 100000; i++) {
|
|
120
|
-
|
|
120
|
+
cRedBlackTree.setElement(i, i);
|
|
121
121
|
}
|
|
122
122
|
console.log((performance.now() - cS).toFixed(2), `CRedBlackTree ${n.toLocaleString()} add`);
|
|
123
|
-
console.log(
|
|
123
|
+
console.log(cRedBlackTree.size(), `cRedBlackTree.size()`);
|
|
124
124
|
} catch (e) {
|
|
125
125
|
console.error(e);
|
|
126
126
|
}
|
|
@@ -9,14 +9,14 @@ const { TEN_THOUSAND } = magnitude;
|
|
|
9
9
|
const arr = getRandomIntArray(TEN_THOUSAND, 0, TEN_THOUSAND - 1, true);
|
|
10
10
|
|
|
11
11
|
suite
|
|
12
|
-
.add(`${TEN_THOUSAND.toLocaleString()}
|
|
12
|
+
.add(`${TEN_THOUSAND.toLocaleString()} RedBlackTree add randomly`, () => {
|
|
13
13
|
rbTree.clear();
|
|
14
14
|
for (let i = 0; i < arr.length; i++) rbTree.add(arr[i]);
|
|
15
15
|
})
|
|
16
|
-
.add(`${TEN_THOUSAND.toLocaleString()}
|
|
16
|
+
.add(`${TEN_THOUSAND.toLocaleString()} RedBlackTree get randomly`, () => {
|
|
17
17
|
for (let i = 0; i < arr.length; i++) rbTree.get(arr[i]);
|
|
18
18
|
})
|
|
19
|
-
.add(`${TEN_THOUSAND.toLocaleString()}
|
|
19
|
+
.add(`${TEN_THOUSAND.toLocaleString()} RedBlackTree add & delete randomly`, () => {
|
|
20
20
|
rbTree.clear();
|
|
21
21
|
for (let i = 0; i < arr.length; i++) rbTree.add(arr[i]);
|
|
22
22
|
for (let i = 0; i < arr.length; i++) rbTree.delete(arr[i]);
|
|
@@ -626,18 +626,18 @@ describe('AVLTreeMultiMap iterative methods test', () => {
|
|
|
626
626
|
|
|
627
627
|
it('forEach should iterate over all elements', () => {
|
|
628
628
|
const mockCallback = jest.fn();
|
|
629
|
-
treeMM.forEach((
|
|
630
|
-
mockCallback(
|
|
629
|
+
treeMM.forEach((key, value) => {
|
|
630
|
+
mockCallback(key, value);
|
|
631
631
|
});
|
|
632
632
|
|
|
633
633
|
expect(mockCallback.mock.calls.length).toBe(3);
|
|
634
|
-
expect(mockCallback.mock.calls[0]).toEqual(['a'
|
|
635
|
-
expect(mockCallback.mock.calls[1]).toEqual(['b'
|
|
636
|
-
expect(mockCallback.mock.calls[2]).toEqual(['c'
|
|
634
|
+
expect(mockCallback.mock.calls[0]).toEqual([1, 'a']);
|
|
635
|
+
expect(mockCallback.mock.calls[1]).toEqual([2, 'b']);
|
|
636
|
+
expect(mockCallback.mock.calls[2]).toEqual([3, 'c']);
|
|
637
637
|
});
|
|
638
638
|
|
|
639
639
|
it('filter should return a new tree with filtered elements', () => {
|
|
640
|
-
const filteredTree = treeMM.filter(
|
|
640
|
+
const filteredTree = treeMM.filter(key => key > 1);
|
|
641
641
|
expect(filteredTree.size).toBe(2);
|
|
642
642
|
expect([...filteredTree]).toEqual([
|
|
643
643
|
[2, 'b'],
|
|
@@ -646,12 +646,12 @@ describe('AVLTreeMultiMap iterative methods test', () => {
|
|
|
646
646
|
});
|
|
647
647
|
|
|
648
648
|
it('map should return a new tree with modified elements', () => {
|
|
649
|
-
const mappedTree = treeMM.map((
|
|
649
|
+
const mappedTree = treeMM.map((key, value) => [(key * 2).toString(), value]);
|
|
650
650
|
expect(mappedTree.size).toBe(3);
|
|
651
651
|
expect([...mappedTree]).toEqual([
|
|
652
|
-
[
|
|
653
|
-
[
|
|
654
|
-
[
|
|
652
|
+
['2', 'a'],
|
|
653
|
+
['4', 'b'],
|
|
654
|
+
['6', 'c']
|
|
655
655
|
]);
|
|
656
656
|
});
|
|
657
657
|
|
|
@@ -736,7 +736,7 @@ describe('AVLTree toEntryFn', () => {
|
|
|
736
736
|
{ obj: { id: 5 } }
|
|
737
737
|
])
|
|
738
738
|
).toThrowError(
|
|
739
|
-
`When comparing object types, a custom
|
|
739
|
+
`When comparing object types, a custom specifyComparable must be defined in the constructor's options parameter.`
|
|
740
740
|
);
|
|
741
741
|
});
|
|
742
742
|
|
|
@@ -744,7 +744,7 @@ describe('AVLTree toEntryFn', () => {
|
|
|
744
744
|
const tree = new AVLTreeMultiMap<{ obj: { id: number } }, number>(
|
|
745
745
|
[{ obj: { id: 1 } }, { obj: { id: 2 } }, { obj: { id: 3 } }, { obj: { id: 4 } }, { obj: { id: 5 } }],
|
|
746
746
|
{
|
|
747
|
-
|
|
747
|
+
specifyComparable: key => key.obj.id
|
|
748
748
|
}
|
|
749
749
|
);
|
|
750
750
|
|
|
@@ -386,18 +386,18 @@ describe('AVLTree iterative methods test', () => {
|
|
|
386
386
|
|
|
387
387
|
it('forEach should iterate over all elements', () => {
|
|
388
388
|
const mockCallback = jest.fn();
|
|
389
|
-
avl.forEach((
|
|
390
|
-
mockCallback(
|
|
389
|
+
avl.forEach((key, value) => {
|
|
390
|
+
mockCallback(key, value);
|
|
391
391
|
});
|
|
392
392
|
|
|
393
393
|
expect(mockCallback.mock.calls.length).toBe(3);
|
|
394
|
-
expect(mockCallback.mock.calls[0]).toEqual(['a'
|
|
395
|
-
expect(mockCallback.mock.calls[1]).toEqual(['b'
|
|
396
|
-
expect(mockCallback.mock.calls[2]).toEqual(['c'
|
|
394
|
+
expect(mockCallback.mock.calls[0]).toEqual([1, 'a']);
|
|
395
|
+
expect(mockCallback.mock.calls[1]).toEqual([2, 'b']);
|
|
396
|
+
expect(mockCallback.mock.calls[2]).toEqual([3, 'c']);
|
|
397
397
|
});
|
|
398
398
|
|
|
399
399
|
it('filter should return a new tree with filtered elements', () => {
|
|
400
|
-
const filteredTree = avl.filter(
|
|
400
|
+
const filteredTree = avl.filter(key => key > 1);
|
|
401
401
|
expect(filteredTree.size).toBe(2);
|
|
402
402
|
expect([...filteredTree]).toEqual([
|
|
403
403
|
[2, 'b'],
|
|
@@ -406,12 +406,12 @@ describe('AVLTree iterative methods test', () => {
|
|
|
406
406
|
});
|
|
407
407
|
|
|
408
408
|
it('map should return a new tree with modified elements', () => {
|
|
409
|
-
const mappedTree = avl.map((
|
|
409
|
+
const mappedTree = avl.map((key, value) => [(key * 2).toString(), value]);
|
|
410
410
|
expect(mappedTree.size).toBe(3);
|
|
411
411
|
expect([...mappedTree]).toEqual([
|
|
412
|
-
[
|
|
413
|
-
[
|
|
414
|
-
[
|
|
412
|
+
['2', 'a'],
|
|
413
|
+
['4', 'b'],
|
|
414
|
+
['6', 'c']
|
|
415
415
|
]);
|
|
416
416
|
});
|
|
417
417
|
|
|
@@ -1342,18 +1342,18 @@ describe('BinaryTree iterative methods test', () => {
|
|
|
1342
1342
|
|
|
1343
1343
|
it('forEach should iterate over all elements', () => {
|
|
1344
1344
|
const mockCallback = jest.fn();
|
|
1345
|
-
binaryTree.forEach((
|
|
1346
|
-
mockCallback(
|
|
1345
|
+
binaryTree.forEach((key, value) => {
|
|
1346
|
+
mockCallback(key, value);
|
|
1347
1347
|
});
|
|
1348
1348
|
|
|
1349
1349
|
expect(mockCallback.mock.calls.length).toBe(3);
|
|
1350
|
-
expect(mockCallback.mock.calls[0]).toEqual(['b'
|
|
1351
|
-
expect(mockCallback.mock.calls[1]).toEqual(['a'
|
|
1352
|
-
expect(mockCallback.mock.calls[2]).toEqual(['c'
|
|
1350
|
+
expect(mockCallback.mock.calls[0]).toEqual([2, 'b']);
|
|
1351
|
+
expect(mockCallback.mock.calls[1]).toEqual([1, 'a']);
|
|
1352
|
+
expect(mockCallback.mock.calls[2]).toEqual([3, 'c']);
|
|
1353
1353
|
});
|
|
1354
1354
|
|
|
1355
1355
|
it('filter should return a new tree with filtered elements', () => {
|
|
1356
|
-
const filteredTree = binaryTree.filter((
|
|
1356
|
+
const filteredTree = binaryTree.filter((key, value) => key > 1);
|
|
1357
1357
|
expect(filteredTree.size).toBe(2);
|
|
1358
1358
|
expect([...filteredTree]).toEqual([
|
|
1359
1359
|
[3, 'c'],
|
|
@@ -1362,12 +1362,12 @@ describe('BinaryTree iterative methods test', () => {
|
|
|
1362
1362
|
});
|
|
1363
1363
|
|
|
1364
1364
|
it('map should return a new tree with modified elements', () => {
|
|
1365
|
-
const mappedTree = binaryTree.map((
|
|
1365
|
+
const mappedTree = binaryTree.map((key, value) => [(key * 2).toString(), value]);
|
|
1366
1366
|
expect(mappedTree.size).toBe(3);
|
|
1367
1367
|
expect([...mappedTree]).toEqual([
|
|
1368
|
-
[
|
|
1369
|
-
[
|
|
1370
|
-
[
|
|
1368
|
+
['2', 'a'],
|
|
1369
|
+
['4', 'b'],
|
|
1370
|
+
['6', 'c']
|
|
1371
1371
|
]);
|
|
1372
1372
|
});
|
|
1373
1373
|
|
|
@@ -981,7 +981,7 @@ describe('BST operations test recursively', () => {
|
|
|
981
981
|
|
|
982
982
|
if (isTestStackOverflow) {
|
|
983
983
|
it('should getLeftMost', () => {
|
|
984
|
-
const bst = new BST<number>([], {
|
|
984
|
+
const bst = new BST<number>([], { specifyComparable: key => key });
|
|
985
985
|
for (let i = 1; i <= SYSTEM_MAX_CALL_STACK; i++) bst.add(i);
|
|
986
986
|
|
|
987
987
|
expect(() => {
|
|
@@ -1110,18 +1110,18 @@ describe('BST iterative methods test', () => {
|
|
|
1110
1110
|
|
|
1111
1111
|
it('forEach should iterate over all elements', () => {
|
|
1112
1112
|
const mockCallback = jest.fn();
|
|
1113
|
-
bst.forEach((
|
|
1114
|
-
mockCallback(
|
|
1113
|
+
bst.forEach((key, value) => {
|
|
1114
|
+
mockCallback(key, value);
|
|
1115
1115
|
});
|
|
1116
1116
|
|
|
1117
1117
|
expect(mockCallback.mock.calls.length).toBe(3);
|
|
1118
|
-
expect(mockCallback.mock.calls[0]).toEqual(['a'
|
|
1119
|
-
expect(mockCallback.mock.calls[1]).toEqual(['b'
|
|
1120
|
-
expect(mockCallback.mock.calls[2]).toEqual(['c'
|
|
1118
|
+
expect(mockCallback.mock.calls[0]).toEqual([1, 'a']);
|
|
1119
|
+
expect(mockCallback.mock.calls[1]).toEqual([2, 'b']);
|
|
1120
|
+
expect(mockCallback.mock.calls[2]).toEqual([3, 'c']);
|
|
1121
1121
|
});
|
|
1122
1122
|
|
|
1123
1123
|
it('filter should return a new tree with filtered elements', () => {
|
|
1124
|
-
const filteredTree = bst.filter((
|
|
1124
|
+
const filteredTree = bst.filter((key, value) => key > 1);
|
|
1125
1125
|
expect(filteredTree.size).toBe(2);
|
|
1126
1126
|
expect([...filteredTree]).toEqual([
|
|
1127
1127
|
[2, 'b'],
|
|
@@ -1130,12 +1130,12 @@ describe('BST iterative methods test', () => {
|
|
|
1130
1130
|
});
|
|
1131
1131
|
|
|
1132
1132
|
it('map should return a new tree with modified elements', () => {
|
|
1133
|
-
const mappedTree = bst.map((
|
|
1133
|
+
const mappedTree = bst.map((key, value) => [(key * 2).toString(), value]);
|
|
1134
1134
|
expect(mappedTree.size).toBe(3);
|
|
1135
1135
|
expect([...mappedTree]).toEqual([
|
|
1136
|
-
[
|
|
1137
|
-
[
|
|
1138
|
-
[
|
|
1136
|
+
['2', 'a'],
|
|
1137
|
+
['4', 'b'],
|
|
1138
|
+
['6', 'c']
|
|
1139
1139
|
]);
|
|
1140
1140
|
});
|
|
1141
1141
|
|