data-structure-typed 1.46.8 → 1.47.0
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/README.md +1 -1
- package/benchmark/report.html +1 -46
- package/benchmark/report.json +11 -422
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +4 -2
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +10 -0
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +51 -13
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +153 -55
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +10 -9
- package/dist/cjs/data-structures/binary-tree/bst.js +16 -14
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +7 -5
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +32 -23
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +5 -3
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js +11 -2
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +3 -3
- package/dist/cjs/types/common.d.ts +5 -4
- package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -1
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +3 -1
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.js +0 -6
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +2 -1
- package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +2 -1
- package/dist/cjs/types/data-structures/binary-tree/tree-multimap.d.ts +2 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +4 -2
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +11 -0
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +51 -13
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +154 -55
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +10 -9
- package/dist/mjs/data-structures/binary-tree/bst.js +17 -14
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +7 -5
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +34 -24
- package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +5 -3
- package/dist/mjs/data-structures/binary-tree/tree-multimap.js +12 -2
- package/dist/mjs/interfaces/binary-tree.d.ts +3 -3
- package/dist/mjs/types/common.d.ts +5 -4
- package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -1
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +3 -1
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +0 -6
- package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +2 -1
- package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +2 -1
- package/dist/mjs/types/data-structures/binary-tree/tree-multimap.d.ts +2 -1
- package/dist/umd/data-structure-typed.js +230 -103
- package/dist/umd/data-structure-typed.min.js +4 -1
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +5 -5
- package/src/data-structures/binary-tree/avl-tree.ts +17 -5
- package/src/data-structures/binary-tree/binary-tree.ts +175 -62
- package/src/data-structures/binary-tree/bst.ts +23 -19
- package/src/data-structures/binary-tree/rb-tree.ts +38 -27
- package/src/data-structures/binary-tree/tree-multimap.ts +19 -6
- package/src/interfaces/binary-tree.ts +3 -3
- package/src/types/common.ts +2 -5
- package/src/types/data-structures/binary-tree/avl-tree.ts +5 -1
- package/src/types/data-structures/binary-tree/binary-tree.ts +5 -7
- package/src/types/data-structures/binary-tree/bst.ts +3 -1
- package/src/types/data-structures/binary-tree/rb-tree.ts +3 -1
- package/src/types/data-structures/binary-tree/tree-multimap.ts +3 -1
- package/test/integration/index.html +30 -28
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +7 -0
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +57 -1
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +62 -7
- package/test/unit/data-structures/binary-tree/bst.test.ts +56 -1
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +98 -42
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
|
|
6
6
|
* @license MIT License
|
|
7
7
|
*/
|
|
8
|
-
import { RBTNColor } from '../../types';
|
|
8
|
+
import { IterationType, RBTNColor } from '../../types';
|
|
9
9
|
import { BST, BSTNode } from './bst';
|
|
10
10
|
import { BinaryTreeNode } from './binary-tree';
|
|
11
11
|
export class RedBlackTreeNode extends BSTNode {
|
|
@@ -18,12 +18,13 @@ export class RedBlackTreeNode extends BSTNode {
|
|
|
18
18
|
/**
|
|
19
19
|
* 1. Each node is either red or black.
|
|
20
20
|
* 2. The root node is always black.
|
|
21
|
-
* 3. Leaf nodes are typically
|
|
21
|
+
* 3. Leaf nodes are typically Sentinel nodes and are considered black.
|
|
22
22
|
* 4. Red nodes must have black children.
|
|
23
23
|
* 5. Black balance: Every path from any node to each of its leaf nodes contains the same number of black nodes.
|
|
24
24
|
*/
|
|
25
25
|
export class RedBlackTree extends BST {
|
|
26
|
-
|
|
26
|
+
Sentinel = new RedBlackTreeNode(NaN);
|
|
27
|
+
options;
|
|
27
28
|
/**
|
|
28
29
|
* The constructor function initializes a Red-Black Tree with an optional set of options.
|
|
29
30
|
* @param {RBTreeOptions} [options] - The `options` parameter is an optional object that can be
|
|
@@ -31,7 +32,13 @@ export class RedBlackTree extends BST {
|
|
|
31
32
|
*/
|
|
32
33
|
constructor(options) {
|
|
33
34
|
super(options);
|
|
34
|
-
|
|
35
|
+
if (options) {
|
|
36
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b, ...options };
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b };
|
|
40
|
+
}
|
|
41
|
+
this._root = this.Sentinel;
|
|
35
42
|
}
|
|
36
43
|
_root;
|
|
37
44
|
get root() {
|
|
@@ -41,6 +48,12 @@ export class RedBlackTree extends BST {
|
|
|
41
48
|
get size() {
|
|
42
49
|
return this._size;
|
|
43
50
|
}
|
|
51
|
+
createNode(key, value, color = RBTNColor.BLACK) {
|
|
52
|
+
return new RedBlackTreeNode(key, value, color);
|
|
53
|
+
}
|
|
54
|
+
createTree(options) {
|
|
55
|
+
return new RedBlackTree({ ...this.options, ...options });
|
|
56
|
+
}
|
|
44
57
|
/**
|
|
45
58
|
* Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
|
|
46
59
|
* Space Complexity: O(1)
|
|
@@ -73,11 +86,11 @@ export class RedBlackTree extends BST {
|
|
|
73
86
|
else {
|
|
74
87
|
return;
|
|
75
88
|
}
|
|
76
|
-
node.left = this.
|
|
77
|
-
node.right = this.
|
|
89
|
+
node.left = this.Sentinel;
|
|
90
|
+
node.right = this.Sentinel;
|
|
78
91
|
let y = undefined;
|
|
79
92
|
let x = this.root;
|
|
80
|
-
while (x !== this.
|
|
93
|
+
while (x !== this.Sentinel) {
|
|
81
94
|
y = x;
|
|
82
95
|
if (x) {
|
|
83
96
|
if (node.key < x.key) {
|
|
@@ -113,9 +126,6 @@ export class RedBlackTree extends BST {
|
|
|
113
126
|
this._fixInsert(node);
|
|
114
127
|
this._size++;
|
|
115
128
|
}
|
|
116
|
-
createNode(key, value, color = RBTNColor.BLACK) {
|
|
117
|
-
return new RedBlackTreeNode(key, value, color);
|
|
118
|
-
}
|
|
119
129
|
/**
|
|
120
130
|
* Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
|
|
121
131
|
* Space Complexity: O(1)
|
|
@@ -140,9 +150,9 @@ export class RedBlackTree extends BST {
|
|
|
140
150
|
if (identifier === null)
|
|
141
151
|
return ans;
|
|
142
152
|
const helper = (node) => {
|
|
143
|
-
let z = this.
|
|
153
|
+
let z = this.Sentinel;
|
|
144
154
|
let x, y;
|
|
145
|
-
while (node !== this.
|
|
155
|
+
while (node !== this.Sentinel) {
|
|
146
156
|
if (node && callback(node) === identifier) {
|
|
147
157
|
z = node;
|
|
148
158
|
}
|
|
@@ -153,17 +163,17 @@ export class RedBlackTree extends BST {
|
|
|
153
163
|
node = node?.left;
|
|
154
164
|
}
|
|
155
165
|
}
|
|
156
|
-
if (z === this.
|
|
166
|
+
if (z === this.Sentinel) {
|
|
157
167
|
this._size--;
|
|
158
168
|
return;
|
|
159
169
|
}
|
|
160
170
|
y = z;
|
|
161
171
|
let yOriginalColor = y.color;
|
|
162
|
-
if (z.left === this.
|
|
172
|
+
if (z.left === this.Sentinel) {
|
|
163
173
|
x = z.right;
|
|
164
174
|
this._rbTransplant(z, z.right);
|
|
165
175
|
}
|
|
166
|
-
else if (z.right === this.
|
|
176
|
+
else if (z.right === this.Sentinel) {
|
|
167
177
|
x = z.left;
|
|
168
178
|
this._rbTransplant(z, z.left);
|
|
169
179
|
}
|
|
@@ -194,7 +204,7 @@ export class RedBlackTree extends BST {
|
|
|
194
204
|
return ans;
|
|
195
205
|
}
|
|
196
206
|
isRealNode(node) {
|
|
197
|
-
return node !== this.
|
|
207
|
+
return node !== this.Sentinel && node !== undefined;
|
|
198
208
|
}
|
|
199
209
|
/**
|
|
200
210
|
* Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
|
|
@@ -221,7 +231,7 @@ export class RedBlackTree extends BST {
|
|
|
221
231
|
* `getNodes` method, which is called within the `getNode` method.
|
|
222
232
|
* @returns a value of type `N`, `null`, or `undefined`.
|
|
223
233
|
*/
|
|
224
|
-
getNode(identifier, callback = this._defaultOneParamCallback, beginRoot = this.root, iterationType = this.iterationType) {
|
|
234
|
+
getNode(identifier, callback = this._defaultOneParamCallback, beginRoot = this.root, iterationType = this.options.iterationType) {
|
|
225
235
|
if (identifier instanceof BinaryTreeNode)
|
|
226
236
|
callback = (node => node);
|
|
227
237
|
beginRoot = this.ensureNotKey(beginRoot);
|
|
@@ -240,11 +250,11 @@ export class RedBlackTree extends BST {
|
|
|
240
250
|
* @returns the successor of the given RedBlackTreeNode.
|
|
241
251
|
*/
|
|
242
252
|
getSuccessor(x) {
|
|
243
|
-
if (x.right !== this.
|
|
253
|
+
if (x.right !== this.Sentinel) {
|
|
244
254
|
return this.getLeftMost(x.right) ?? undefined;
|
|
245
255
|
}
|
|
246
256
|
let y = x.parent;
|
|
247
|
-
while (y !== this.
|
|
257
|
+
while (y !== this.Sentinel && y !== undefined && x === y.right) {
|
|
248
258
|
x = y;
|
|
249
259
|
y = y.parent;
|
|
250
260
|
}
|
|
@@ -264,18 +274,18 @@ export class RedBlackTree extends BST {
|
|
|
264
274
|
* @returns the predecessor of the given RedBlackTreeNode 'x'.
|
|
265
275
|
*/
|
|
266
276
|
getPredecessor(x) {
|
|
267
|
-
if (x.left !== this.
|
|
277
|
+
if (x.left !== this.Sentinel) {
|
|
268
278
|
return this.getRightMost(x.left);
|
|
269
279
|
}
|
|
270
280
|
let y = x.parent;
|
|
271
|
-
while (y !== this.
|
|
281
|
+
while (y !== this.Sentinel && x === y.left) {
|
|
272
282
|
x = y;
|
|
273
283
|
y = y.parent;
|
|
274
284
|
}
|
|
275
285
|
return y;
|
|
276
286
|
}
|
|
277
287
|
clear() {
|
|
278
|
-
this._root = this.
|
|
288
|
+
this._root = this.Sentinel;
|
|
279
289
|
this._size = 0;
|
|
280
290
|
}
|
|
281
291
|
_setRoot(v) {
|
|
@@ -299,7 +309,7 @@ export class RedBlackTree extends BST {
|
|
|
299
309
|
if (x.right) {
|
|
300
310
|
const y = x.right;
|
|
301
311
|
x.right = y.left;
|
|
302
|
-
if (y.left !== this.
|
|
312
|
+
if (y.left !== this.Sentinel) {
|
|
303
313
|
if (y.left)
|
|
304
314
|
y.left.parent = x;
|
|
305
315
|
}
|
|
@@ -333,7 +343,7 @@ export class RedBlackTree extends BST {
|
|
|
333
343
|
if (x.left) {
|
|
334
344
|
const y = x.left;
|
|
335
345
|
x.left = y.right;
|
|
336
|
-
if (y.right !== this.
|
|
346
|
+
if (y.right !== this.Sentinel) {
|
|
337
347
|
if (y.right)
|
|
338
348
|
y.right.parent = x;
|
|
339
349
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @license MIT License
|
|
7
7
|
*/
|
|
8
8
|
import type { BTNKey, TreeMultimapNodeNested, TreeMultimapOptions } from '../../types';
|
|
9
|
-
import { BiTreeDeleteResult, BTNCallback, IterationType } from '../../types';
|
|
9
|
+
import { BiTreeDeleteResult, BTNCallback, IterationType, TreeMultimapNested } from '../../types';
|
|
10
10
|
import { IBinaryTree } from '../../interfaces';
|
|
11
11
|
import { AVLTree, AVLTreeNode } from './avl-tree';
|
|
12
12
|
export declare class TreeMultimapNode<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNodeNested<V>> extends AVLTreeNode<V, N> {
|
|
@@ -26,7 +26,8 @@ export declare class TreeMultimapNode<V = any, N extends TreeMultimapNode<V, N>
|
|
|
26
26
|
/**
|
|
27
27
|
* The only distinction between a TreeMultimap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
|
|
28
28
|
*/
|
|
29
|
-
export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNode<V, TreeMultimapNodeNested<V>>> extends AVLTree<V, N> implements IBinaryTree<V, N> {
|
|
29
|
+
export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNode<V, TreeMultimapNodeNested<V>>, TREE extends TreeMultimap<V, N, TREE> = TreeMultimap<V, N, TreeMultimapNested<V, N>>> extends AVLTree<V, N, TREE> implements IBinaryTree<V, N, TREE> {
|
|
30
|
+
options: TreeMultimapOptions;
|
|
30
31
|
/**
|
|
31
32
|
* The constructor function for a TreeMultimap class in TypeScript, which extends another class and sets an option to
|
|
32
33
|
* merge duplicated values.
|
|
@@ -46,6 +47,7 @@ export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = Tr
|
|
|
46
47
|
* @returns A new instance of the BSTNode class with the specified key, value, and count (if provided).
|
|
47
48
|
*/
|
|
48
49
|
createNode(key: BTNKey, value?: V, count?: number): N;
|
|
50
|
+
createTree(options?: TreeMultimapOptions): TREE;
|
|
49
51
|
/**
|
|
50
52
|
* Time Complexity: O(log n) - logarithmic time, where "n" is the number of nodes in the tree. The add method of the superclass (AVLTree) has logarithmic time complexity.
|
|
51
53
|
* Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size.
|
|
@@ -98,7 +100,7 @@ export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = Tr
|
|
|
98
100
|
* values:
|
|
99
101
|
* @returns a boolean value.
|
|
100
102
|
*/
|
|
101
|
-
perfectlyBalance(iterationType?: IterationType): boolean;
|
|
103
|
+
perfectlyBalance(iterationType?: IterationType | undefined): boolean;
|
|
102
104
|
/**
|
|
103
105
|
* Time Complexity: O(n log n) - logarithmic time for each insertion, where "n" is the number of nodes in the tree. This is because the method calls the add method for each node.
|
|
104
106
|
* Space Complexity: O(n) - linear space, as it creates an array to store the sorted nodes.
|
|
@@ -21,14 +21,21 @@ export class TreeMultimapNode extends AVLTreeNode {
|
|
|
21
21
|
* The only distinction between a TreeMultimap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
|
|
22
22
|
*/
|
|
23
23
|
export class TreeMultimap extends AVLTree {
|
|
24
|
+
options;
|
|
24
25
|
/**
|
|
25
26
|
* The constructor function for a TreeMultimap class in TypeScript, which extends another class and sets an option to
|
|
26
27
|
* merge duplicated values.
|
|
27
28
|
* @param {TreeMultimapOptions} [options] - An optional object that contains additional configuration options for the
|
|
28
29
|
* TreeMultimap.
|
|
29
30
|
*/
|
|
30
|
-
constructor(options) {
|
|
31
|
+
constructor(options = { iterationType: IterationType.ITERATIVE }) {
|
|
31
32
|
super(options);
|
|
33
|
+
if (options) {
|
|
34
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b, ...options };
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b };
|
|
38
|
+
}
|
|
32
39
|
}
|
|
33
40
|
_count = 0;
|
|
34
41
|
get count() {
|
|
@@ -46,6 +53,9 @@ export class TreeMultimap extends AVLTree {
|
|
|
46
53
|
createNode(key, value, count) {
|
|
47
54
|
return new TreeMultimapNode(key, value, count);
|
|
48
55
|
}
|
|
56
|
+
createTree(options) {
|
|
57
|
+
return new TreeMultimap({ ...this.options, ...options });
|
|
58
|
+
}
|
|
49
59
|
/**
|
|
50
60
|
* Time Complexity: O(log n) - logarithmic time, where "n" is the number of nodes in the tree. The add method of the superclass (AVLTree) has logarithmic time complexity.
|
|
51
61
|
* Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size.
|
|
@@ -191,7 +201,7 @@ export class TreeMultimap extends AVLTree {
|
|
|
191
201
|
* values:
|
|
192
202
|
* @returns a boolean value.
|
|
193
203
|
*/
|
|
194
|
-
perfectlyBalance(iterationType = this.iterationType) {
|
|
204
|
+
perfectlyBalance(iterationType = this.options.iterationType) {
|
|
195
205
|
const sorted = this.dfs(node => node, 'in'), n = sorted.length;
|
|
196
206
|
if (sorted.length < 1)
|
|
197
207
|
return false;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BinaryTreeNode } from '../data-structures';
|
|
2
|
-
import { BinaryTreeNodeNested, BiTreeDeleteResult, BTNCallback, BTNKey } from '../types';
|
|
3
|
-
export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>> {
|
|
1
|
+
import { BinaryTree, BinaryTreeNode } from '../data-structures';
|
|
2
|
+
import { BinaryTreeNested, BinaryTreeNodeNested, BiTreeDeleteResult, BTNCallback, BTNKey } from '../types';
|
|
3
|
+
export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>, TREE extends BinaryTree<V, N, TREE> = BinaryTreeNested<V, N>> {
|
|
4
4
|
createNode(key: BTNKey, value?: N['value']): N;
|
|
5
5
|
add(keyOrNode: BTNKey | N | null, value?: N['value']): N | null | undefined;
|
|
6
6
|
delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null, callback: C): BiTreeDeleteResult<N>[];
|
|
@@ -6,10 +6,6 @@ export declare enum CP {
|
|
|
6
6
|
eq = "eq",
|
|
7
7
|
gt = "gt"
|
|
8
8
|
}
|
|
9
|
-
export declare const enum IterateDirection {
|
|
10
|
-
DEFAULT = 0,
|
|
11
|
-
REVERSE = 1
|
|
12
|
-
}
|
|
13
9
|
export interface IterableWithSize<T> extends Iterable<T> {
|
|
14
10
|
size: number | ((...args: any[]) => number);
|
|
15
11
|
}
|
|
@@ -17,3 +13,8 @@ export interface IterableWithLength<T> extends Iterable<T> {
|
|
|
17
13
|
length: number | ((...args: any[]) => number);
|
|
18
14
|
}
|
|
19
15
|
export type IterableWithSizeOrLength<T> = IterableWithSize<T> | IterableWithLength<T>;
|
|
16
|
+
export type BinaryTreePrintOptions = {
|
|
17
|
+
isShowUndefined?: boolean;
|
|
18
|
+
isShowNull?: boolean;
|
|
19
|
+
isShowRedBlackNIL?: boolean;
|
|
20
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AVLTreeNode } from '../../../data-structures';
|
|
1
|
+
import { AVLTree, AVLTreeNode } from '../../../data-structures';
|
|
2
2
|
import { BSTOptions } from './bst';
|
|
3
3
|
export type AVLTreeNodeNested<T> = AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
4
|
+
export type AVLTreeNested<T, N extends AVLTreeNode<T, N>> = AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
4
5
|
export type AVLTreeOptions = BSTOptions & {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BinaryTreeNode } from '../../../data-structures';
|
|
1
|
+
import { BinaryTree, BinaryTreeNode } from '../../../data-structures';
|
|
2
2
|
/**
|
|
3
3
|
* Enum representing different loop types.
|
|
4
4
|
*
|
|
@@ -24,6 +24,8 @@ export type BiTreeDeleteResult<N> = {
|
|
|
24
24
|
needBalanced: N | null | undefined;
|
|
25
25
|
};
|
|
26
26
|
export type BinaryTreeNodeNested<T> = BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
27
|
+
export type BinaryTreeNested<T, N extends BinaryTreeNode<T, N>> = BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
27
28
|
export type BinaryTreeOptions = {
|
|
28
29
|
iterationType?: IterationType;
|
|
29
30
|
};
|
|
31
|
+
export type NodeDisplayLayout = [string[], number, number, number];
|
|
@@ -19,9 +19,3 @@ export var FamilyPosition;
|
|
|
19
19
|
FamilyPosition["ISOLATED"] = "ISOLATED";
|
|
20
20
|
FamilyPosition["MAL_NODE"] = "MAL_NODE";
|
|
21
21
|
})(FamilyPosition || (FamilyPosition = {}));
|
|
22
|
-
//
|
|
23
|
-
// export type BTNIdentifierOrNU<N> = BTNKey | N | null | undefined;
|
|
24
|
-
//
|
|
25
|
-
// export type BTNIdentifierOrU<N> = BTNKey | N | undefined;
|
|
26
|
-
//
|
|
27
|
-
// export type BTNOrNU<N> = N | null | undefined;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { BSTNode } from '../../../data-structures';
|
|
1
|
+
import { BST, BSTNode } from '../../../data-structures';
|
|
2
2
|
import type { BinaryTreeOptions, BTNKey } from './binary-tree';
|
|
3
3
|
export type BSTComparator = (a: BTNKey, b: BTNKey) => number;
|
|
4
4
|
export type BSTNodeNested<T> = BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
5
|
+
export type BSTNested<T, N extends BSTNode<T, N>> = BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
5
6
|
export type BSTOptions = BinaryTreeOptions & {
|
|
6
7
|
comparator?: BSTComparator;
|
|
7
8
|
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { RedBlackTreeNode } from '../../../data-structures';
|
|
1
|
+
import { RedBlackTree, RedBlackTreeNode } from '../../../data-structures';
|
|
2
2
|
import { BSTOptions } from "./bst";
|
|
3
3
|
export declare enum RBTNColor {
|
|
4
4
|
RED = 1,
|
|
5
5
|
BLACK = 0
|
|
6
6
|
}
|
|
7
7
|
export type RedBlackTreeNodeNested<T> = RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
8
|
+
export type RedBlackTreeNested<T, N extends RedBlackTreeNode<T, N>> = RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
8
9
|
export type RBTreeOptions = BSTOptions & {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { TreeMultimapNode } from '../../../data-structures';
|
|
1
|
+
import { TreeMultimap, TreeMultimapNode } from '../../../data-structures';
|
|
2
2
|
import { AVLTreeOptions } from './avl-tree';
|
|
3
3
|
export type TreeMultimapNodeNested<T> = TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
4
|
+
export type TreeMultimapNested<T, N extends TreeMultimapNode<T, N>> = TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
|
|
4
5
|
export type TreeMultimapOptions = Omit<AVLTreeOptions, 'isMergeDuplicatedNodeByKey'> & {};
|