avl-tree-typed 1.46.8 → 1.47.1

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.
Files changed (31) hide show
  1. package/dist/data-structures/binary-tree/avl-tree.d.ts +4 -2
  2. package/dist/data-structures/binary-tree/avl-tree.js +10 -0
  3. package/dist/data-structures/binary-tree/binary-tree.d.ts +51 -13
  4. package/dist/data-structures/binary-tree/binary-tree.js +153 -55
  5. package/dist/data-structures/binary-tree/bst.d.ts +10 -9
  6. package/dist/data-structures/binary-tree/bst.js +16 -14
  7. package/dist/data-structures/binary-tree/rb-tree.d.ts +7 -5
  8. package/dist/data-structures/binary-tree/rb-tree.js +32 -23
  9. package/dist/data-structures/binary-tree/tree-multimap.d.ts +5 -3
  10. package/dist/data-structures/binary-tree/tree-multimap.js +11 -2
  11. package/dist/interfaces/binary-tree.d.ts +3 -3
  12. package/dist/types/common.d.ts +5 -4
  13. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +2 -1
  14. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +3 -1
  15. package/dist/types/data-structures/binary-tree/binary-tree.js +0 -6
  16. package/dist/types/data-structures/binary-tree/bst.d.ts +2 -1
  17. package/dist/types/data-structures/binary-tree/rb-tree.d.ts +2 -1
  18. package/dist/types/data-structures/binary-tree/tree-multimap.d.ts +2 -1
  19. package/package.json +2 -2
  20. package/src/data-structures/binary-tree/avl-tree.ts +17 -5
  21. package/src/data-structures/binary-tree/binary-tree.ts +175 -62
  22. package/src/data-structures/binary-tree/bst.ts +23 -19
  23. package/src/data-structures/binary-tree/rb-tree.ts +38 -27
  24. package/src/data-structures/binary-tree/tree-multimap.ts +19 -6
  25. package/src/interfaces/binary-tree.ts +3 -3
  26. package/src/types/common.ts +2 -5
  27. package/src/types/data-structures/binary-tree/avl-tree.ts +5 -1
  28. package/src/types/data-structures/binary-tree/binary-tree.ts +5 -7
  29. package/src/types/data-structures/binary-tree/bst.ts +3 -1
  30. package/src/types/data-structures/binary-tree/rb-tree.ts +3 -1
  31. package/src/types/data-structures/binary-tree/tree-multimap.ts +3 -1
@@ -13,6 +13,7 @@ import {
13
13
  IterationType,
14
14
  RBTNColor,
15
15
  RBTreeOptions,
16
+ RedBlackTreeNested,
16
17
  RedBlackTreeNodeNested
17
18
  } from '../../types';
18
19
  import { BST, BSTNode } from './bst';
@@ -34,14 +35,15 @@ export class RedBlackTreeNode<V = any, N extends RedBlackTreeNode<V, N> = RedBla
34
35
  /**
35
36
  * 1. Each node is either red or black.
36
37
  * 2. The root node is always black.
37
- * 3. Leaf nodes are typically NIL nodes and are considered black.
38
+ * 3. Leaf nodes are typically Sentinel nodes and are considered black.
38
39
  * 4. Red nodes must have black children.
39
40
  * 5. Black balance: Every path from any node to each of its leaf nodes contains the same number of black nodes.
40
41
  */
41
- export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTreeNode<V, RedBlackTreeNodeNested<V>>>
42
- extends BST<V, N>
43
- implements IBinaryTree<V, N> {
44
- NIL: N = new RedBlackTreeNode<V>(NaN) as unknown as N;
42
+ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTreeNode<V, RedBlackTreeNodeNested<V>>, TREE extends RedBlackTree<V, N, TREE> = RedBlackTree<V, N, RedBlackTreeNested<V, N>>>
43
+ extends BST<V, N, TREE>
44
+ implements IBinaryTree<V, N, TREE> {
45
+ Sentinel: N = new RedBlackTreeNode<V>(NaN) as unknown as N;
46
+ override options: RBTreeOptions;
45
47
 
46
48
  /**
47
49
  * The constructor function initializes a Red-Black Tree with an optional set of options.
@@ -50,7 +52,12 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
50
52
  */
51
53
  constructor(options?: RBTreeOptions) {
52
54
  super(options);
53
- this._root = this.NIL;
55
+ if (options) {
56
+ this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b, ...options }
57
+ } else {
58
+ this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b };
59
+ }
60
+ this._root = this.Sentinel;
54
61
  }
55
62
 
56
63
  protected _root: N;
@@ -65,6 +72,14 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
65
72
  return this._size;
66
73
  }
67
74
 
75
+ override createNode(key: BTNKey, value?: V, color: RBTNColor = RBTNColor.BLACK): N {
76
+ return new RedBlackTreeNode<V, N>(key, value, color) as N;
77
+ }
78
+
79
+ override createTree(options?: RBTreeOptions): TREE {
80
+ return new RedBlackTree<V, N, TREE>({ ...this.options, ...options }) as TREE;
81
+ }
82
+
68
83
  /**
69
84
  * Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
70
85
  * Space Complexity: O(1)
@@ -95,13 +110,13 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
95
110
  return;
96
111
  }
97
112
 
98
- node.left = this.NIL;
99
- node.right = this.NIL;
113
+ node.left = this.Sentinel;
114
+ node.right = this.Sentinel;
100
115
 
101
116
  let y: N | undefined = undefined;
102
117
  let x: N | undefined = this.root;
103
118
 
104
- while (x !== this.NIL) {
119
+ while (x !== this.Sentinel) {
105
120
  y = x;
106
121
  if (x) {
107
122
  if (node.key < x.key) {
@@ -139,10 +154,6 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
139
154
  this._size++;
140
155
  }
141
156
 
142
- override createNode(key: BTNKey, value?: V, color: RBTNColor = RBTNColor.BLACK): N {
143
- return new RedBlackTreeNode<V, N>(key, value, color) as N;
144
- }
145
-
146
157
  /**
147
158
  * Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
148
159
  * Space Complexity: O(1)
@@ -170,9 +181,9 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
170
181
  const ans: BiTreeDeleteResult<N>[] = [];
171
182
  if (identifier === null) return ans;
172
183
  const helper = (node: N | undefined): void => {
173
- let z: N = this.NIL;
184
+ let z: N = this.Sentinel;
174
185
  let x: N | undefined, y: N;
175
- while (node !== this.NIL) {
186
+ while (node !== this.Sentinel) {
176
187
  if (node && callback(node) === identifier) {
177
188
  z = node;
178
189
  }
@@ -184,17 +195,17 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
184
195
  }
185
196
  }
186
197
 
187
- if (z === this.NIL) {
198
+ if (z === this.Sentinel) {
188
199
  this._size--;
189
200
  return;
190
201
  }
191
202
 
192
203
  y = z;
193
204
  let yOriginalColor: number = y.color;
194
- if (z.left === this.NIL) {
205
+ if (z.left === this.Sentinel) {
195
206
  x = z.right;
196
207
  this._rbTransplant(z, z.right!);
197
- } else if (z.right === this.NIL) {
208
+ } else if (z.right === this.Sentinel) {
198
209
  x = z.left;
199
210
  this._rbTransplant(z, z.left!);
200
211
  } else {
@@ -225,7 +236,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
225
236
  }
226
237
 
227
238
  override isRealNode(node: N | undefined): node is N {
228
- return node !== this.NIL && node !== undefined;
239
+ return node !== this.Sentinel && node !== undefined;
229
240
  }
230
241
 
231
242
  getNode<C extends BTNCallback<N, BTNKey>>(
@@ -279,7 +290,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
279
290
  identifier: ReturnType<C> | undefined,
280
291
  callback: C = this._defaultOneParamCallback as C,
281
292
  beginRoot: BTNKey | N | undefined = this.root,
282
- iterationType = this.iterationType
293
+ iterationType = this.options.iterationType
283
294
  ): N | null | undefined {
284
295
  if ((identifier as any) instanceof BinaryTreeNode) callback = (node => node) as C;
285
296
  beginRoot = this.ensureNotKey(beginRoot);
@@ -300,12 +311,12 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
300
311
  * @returns the successor of the given RedBlackTreeNode.
301
312
  */
302
313
  override getSuccessor(x: N): N | undefined {
303
- if (x.right !== this.NIL) {
314
+ if (x.right !== this.Sentinel) {
304
315
  return this.getLeftMost(x.right) ?? undefined;
305
316
  }
306
317
 
307
318
  let y: N | undefined = x.parent;
308
- while (y !== this.NIL && y !== undefined && x === y.right) {
319
+ while (y !== this.Sentinel && y !== undefined && x === y.right) {
309
320
  x = y;
310
321
  y = y.parent;
311
322
  }
@@ -327,12 +338,12 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
327
338
  * @returns the predecessor of the given RedBlackTreeNode 'x'.
328
339
  */
329
340
  override getPredecessor(x: N): N {
330
- if (x.left !== this.NIL) {
341
+ if (x.left !== this.Sentinel) {
331
342
  return this.getRightMost(x.left!)!;
332
343
  }
333
344
 
334
345
  let y: N | undefined = x.parent;
335
- while (y !== this.NIL && x === y!.left) {
346
+ while (y !== this.Sentinel && x === y!.left) {
336
347
  x = y!;
337
348
  y = y!.parent;
338
349
  }
@@ -341,7 +352,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
341
352
  }
342
353
 
343
354
  override clear() {
344
- this._root = this.NIL;
355
+ this._root = this.Sentinel;
345
356
  this._size = 0;
346
357
  }
347
358
 
@@ -368,7 +379,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
368
379
  if (x.right) {
369
380
  const y: N = x.right;
370
381
  x.right = y.left;
371
- if (y.left !== this.NIL) {
382
+ if (y.left !== this.Sentinel) {
372
383
  if (y.left) y.left.parent = x;
373
384
  }
374
385
  y.parent = x.parent;
@@ -401,7 +412,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
401
412
  if (x.left) {
402
413
  const y: N = x.left;
403
414
  x.left = y.right;
404
- if (y.right !== this.NIL) {
415
+ if (y.right !== this.Sentinel) {
405
416
  if (y.right) y.right.parent = x;
406
417
  }
407
418
  y.parent = x.parent;
@@ -6,7 +6,7 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import type { BTNKey, TreeMultimapNodeNested, TreeMultimapOptions } from '../../types';
9
- import { BiTreeDeleteResult, BTNCallback, CP, FamilyPosition, IterationType } from '../../types';
9
+ import { BiTreeDeleteResult, BTNCallback, CP, FamilyPosition, IterationType, TreeMultimapNested } from '../../types';
10
10
  import { IBinaryTree } from '../../interfaces';
11
11
  import { AVLTree, AVLTreeNode } from './avl-tree';
12
12
 
@@ -35,17 +35,26 @@ export class TreeMultimapNode<
35
35
  /**
36
36
  * 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.
37
37
  */
38
- export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNode<V, TreeMultimapNodeNested<V>>>
39
- extends AVLTree<V, N>
40
- implements IBinaryTree<V, N> {
38
+ export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNode<V, TreeMultimapNodeNested<V>>,
39
+ TREE extends TreeMultimap<V, N, TREE> = TreeMultimap<V, N, TreeMultimapNested<V, N>>>
40
+ extends AVLTree<V, N, TREE>
41
+ implements IBinaryTree<V, N, TREE> {
42
+
43
+ override options: TreeMultimapOptions;
44
+
41
45
  /**
42
46
  * The constructor function for a TreeMultimap class in TypeScript, which extends another class and sets an option to
43
47
  * merge duplicated values.
44
48
  * @param {TreeMultimapOptions} [options] - An optional object that contains additional configuration options for the
45
49
  * TreeMultimap.
46
50
  */
47
- constructor(options?: TreeMultimapOptions) {
51
+ constructor(options: TreeMultimapOptions = { iterationType: IterationType.ITERATIVE }) {
48
52
  super(options);
53
+ if (options) {
54
+ this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b, ...options }
55
+ } else {
56
+ this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b };
57
+ }
49
58
  }
50
59
 
51
60
  private _count = 0;
@@ -67,6 +76,10 @@ export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultim
67
76
  return new TreeMultimapNode(key, value, count) as N;
68
77
  }
69
78
 
79
+ override createTree(options?: TreeMultimapOptions): TREE {
80
+ return new TreeMultimap<V, N, TREE>({ ...this.options, ...options }) as TREE;
81
+ }
82
+
70
83
  /**
71
84
  * 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.
72
85
  * Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size.
@@ -210,7 +223,7 @@ export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultim
210
223
  * values:
211
224
  * @returns a boolean value.
212
225
  */
213
- override perfectlyBalance(iterationType = this.iterationType): boolean {
226
+ override perfectlyBalance(iterationType = this.options.iterationType): boolean {
214
227
  const sorted = this.dfs(node => node, 'in'),
215
228
  n = sorted.length;
216
229
  if (sorted.length < 1) return false;
@@ -1,7 +1,7 @@
1
- import { BinaryTreeNode } from '../data-structures';
2
- import { BinaryTreeNodeNested, BiTreeDeleteResult, BTNCallback, BTNKey } from '../types';
1
+ import { BinaryTree, BinaryTreeNode } from '../data-structures';
2
+ import { BinaryTreeNested, BinaryTreeNodeNested, BiTreeDeleteResult, BTNCallback, BTNKey } from '../types';
3
3
 
4
- export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>> {
4
+ export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>, TREE extends BinaryTree<V, N, TREE> = BinaryTreeNested<V, N>> {
5
5
  createNode(key: BTNKey, value?: N['value']): N;
6
6
 
7
7
  add(keyOrNode: BTNKey | N | null, value?: N['value']): N | null | undefined;
@@ -10,11 +10,6 @@ export enum CP {
10
10
  gt = 'gt'
11
11
  }
12
12
 
13
- export const enum IterateDirection {
14
- DEFAULT = 0,
15
- REVERSE = 1
16
- }
17
-
18
13
  export interface IterableWithSize<T> extends Iterable<T> {
19
14
  size: number | ((...args: any[]) => number);
20
15
  }
@@ -24,3 +19,5 @@ export interface IterableWithLength<T> extends Iterable<T> {
24
19
  }
25
20
 
26
21
  export type IterableWithSizeOrLength<T> = IterableWithSize<T> | IterableWithLength<T>
22
+
23
+ export type BinaryTreePrintOptions = { isShowUndefined?: boolean, isShowNull?: boolean, isShowRedBlackNIL?: boolean }
@@ -1,5 +1,9 @@
1
- import { AVLTreeNode } from '../../../data-structures';
1
+ import { AVLTree, AVLTreeNode } from '../../../data-structures';
2
2
  import { BSTOptions } from './bst';
3
3
 
4
4
  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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
+
6
+ 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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+
8
+
5
9
  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
  /**
4
4
  * Enum representing different loop types.
@@ -28,10 +28,8 @@ export type BiTreeDeleteResult<N> = { deleted: N | null | undefined; needBalance
28
28
 
29
29
  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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
30
30
 
31
+ 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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
32
+
31
33
  export type BinaryTreeOptions = { iterationType?: IterationType }
32
- //
33
- // export type BTNIdentifierOrNU<N> = BTNKey | N | null | undefined;
34
- //
35
- // export type BTNIdentifierOrU<N> = BTNKey | N | undefined;
36
- //
37
- // export type BTNOrNU<N> = N | null | undefined;
34
+
35
+ export type NodeDisplayLayout = [string[], number, number, number];
@@ -1,4 +1,4 @@
1
- import { BSTNode } from '../../../data-structures';
1
+ import { BST, BSTNode } from '../../../data-structures';
2
2
  import type { BinaryTreeOptions, BTNKey } from './binary-tree';
3
3
 
4
4
  export type BSTComparator = (a: BTNKey, b: BTNKey) => number;
@@ -6,6 +6,8 @@ export type BSTComparator = (a: BTNKey, b: BTNKey) => number;
6
6
  // prettier-ignore
7
7
  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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
8
 
9
+ 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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
10
+
9
11
  export type BSTOptions = BinaryTreeOptions & {
10
12
  comparator?: BSTComparator,
11
13
  }
@@ -1,8 +1,10 @@
1
- import { RedBlackTreeNode } from '../../../data-structures';
1
+ import { RedBlackTree, RedBlackTreeNode } from '../../../data-structures';
2
2
  import { BSTOptions } from "./bst";
3
3
 
4
4
  export enum RBTNColor { RED = 1, BLACK = 0}
5
5
 
6
6
  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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
7
 
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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
9
+
8
10
  export type RBTreeOptions = BSTOptions & {};
@@ -1,6 +1,8 @@
1
- import { TreeMultimapNode } from '../../../data-structures';
1
+ import { TreeMultimap, TreeMultimapNode } from '../../../data-structures';
2
2
  import { AVLTreeOptions } from './avl-tree';
3
3
 
4
4
  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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
5
 
6
+ 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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+
6
8
  export type TreeMultimapOptions = Omit<AVLTreeOptions, 'isMergeDuplicatedNodeByKey'> & {}