data-structure-typed 1.51.1 → 1.51.2

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 (30) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +13 -13
  3. package/benchmark/report.html +13 -13
  4. package/benchmark/report.json +158 -146
  5. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +16 -10
  6. package/dist/cjs/data-structures/binary-tree/binary-tree.js +31 -25
  7. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/bst.d.ts +27 -1
  9. package/dist/cjs/data-structures/binary-tree/bst.js +29 -0
  10. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +1 -47
  12. package/dist/cjs/data-structures/binary-tree/rb-tree.js +6 -61
  13. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  14. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +16 -10
  15. package/dist/mjs/data-structures/binary-tree/binary-tree.js +31 -25
  16. package/dist/mjs/data-structures/binary-tree/bst.d.ts +27 -1
  17. package/dist/mjs/data-structures/binary-tree/bst.js +28 -0
  18. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +1 -47
  19. package/dist/mjs/data-structures/binary-tree/rb-tree.js +6 -60
  20. package/dist/umd/data-structure-typed.js +66 -86
  21. package/dist/umd/data-structure-typed.min.js +2 -2
  22. package/dist/umd/data-structure-typed.min.js.map +1 -1
  23. package/package.json +6 -6
  24. package/src/data-structures/binary-tree/binary-tree.ts +33 -28
  25. package/src/data-structures/binary-tree/bst.ts +36 -1
  26. package/src/data-structures/binary-tree/rb-tree.ts +6 -72
  27. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +4 -0
  28. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +4 -0
  29. package/test/unit/data-structures/binary-tree/overall.test.ts +2 -2
  30. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +40 -40
@@ -47,19 +47,11 @@ class RedBlackTree extends bst_1.BST {
47
47
  */
48
48
  constructor(keysOrNodesOrEntries = [], options) {
49
49
  super([], options);
50
- this._SENTINEL = new RedBlackTreeNode(NaN);
51
- this._root = this.SENTINEL;
50
+ this._root = this.NIL;
52
51
  if (keysOrNodesOrEntries) {
53
52
  this.addMany(keysOrNodesOrEntries);
54
53
  }
55
54
  }
56
- /**
57
- * The function returns the value of the _SENTINEL property.
58
- * @returns The method is returning the value of the `_SENTINEL` property.
59
- */
60
- get SENTINEL() {
61
- return this._SENTINEL;
62
- }
63
55
  /**
64
56
  * The function returns the root node of a tree or undefined if there is no root.
65
57
  * @returns The root node of the tree structure, or undefined if there is no root node.
@@ -147,53 +139,6 @@ class RedBlackTree extends bst_1.BST {
147
139
  isNode(keyOrNodeOrEntry) {
148
140
  return keyOrNodeOrEntry instanceof RedBlackTreeNode;
149
141
  }
150
- /**
151
- * Time Complexity: O(1)
152
- * Space Complexity: O(1)
153
- */
154
- /**
155
- * Time Complexity: O(1)
156
- * Space Complexity: O(1)
157
- *
158
- * The function checks if a given node is a real node in a Red-Black Tree.
159
- * @param {NODE | undefined} node - The `node` parameter is of type `NODE | undefined`, which means
160
- * it can either be of type `NODE` or `undefined`.
161
- * @returns a boolean value.
162
- */
163
- isRealNode(node) {
164
- if (node === this.SENTINEL || node === undefined)
165
- return false;
166
- return node instanceof RedBlackTreeNode;
167
- }
168
- /**
169
- * Time Complexity: O(log n)
170
- * Space Complexity: O(1)
171
- */
172
- /**
173
- * Time Complexity: O(log n)
174
- * Space Complexity: O(1)
175
- *
176
- * The `getNode` function retrieves a node from a Red-Black Tree based on the provided identifier and
177
- * callback function.
178
- * @param {ReturnType<C> | undefined} identifier - The `identifier` parameter is the value or key
179
- * that you want to search for in the binary search tree. It can be of any type that is compatible
180
- * with the type of nodes in the tree.
181
- * @param {C} callback - The `callback` parameter is a function that will be called for each node in
182
- * the tree. It is used to determine whether a node matches the given identifier. The `callback`
183
- * function should take a node as its parameter and return a value that can be compared to the
184
- * `identifier` parameter.
185
- * @param beginRoot - The `beginRoot` parameter is the starting point for the search in the binary
186
- * search tree. It can be either a key or a node. If it is a key, it will be converted to a node
187
- * using the `ensureNode` method. If it is not provided, the `root`
188
- * @param iterationType - The `iterationType` parameter is used to specify the type of iteration to
189
- * be performed when searching for nodes in the binary search tree. It is an optional parameter and
190
- * its default value is taken from the `iterationType` property of the class.
191
- * @returns The method is returning a value of type `NODE | null | undefined`.
192
- */
193
- getNode(identifier, callback = this._DEFAULT_CALLBACK, beginRoot = this.root, iterationType = this.iterationType) {
194
- var _a;
195
- return (_a = this.getNodes(identifier, callback, true, beginRoot, iterationType)[0]) !== null && _a !== void 0 ? _a : undefined;
196
- }
197
142
  /**
198
143
  * Time Complexity: O(1)
199
144
  * Space Complexity: O(1)
@@ -207,7 +152,7 @@ class RedBlackTree extends bst_1.BST {
207
152
  */
208
153
  clear() {
209
154
  super.clear();
210
- this._root = this.SENTINEL;
155
+ this._root = this.NIL;
211
156
  }
212
157
  /**
213
158
  * Time Complexity: O(log n)
@@ -369,10 +314,10 @@ class RedBlackTree extends bst_1.BST {
369
314
  while (this.isRealNode(current)) {
370
315
  parent = current;
371
316
  if (node.key < current.key) {
372
- current = (_a = current.left) !== null && _a !== void 0 ? _a : this.SENTINEL;
317
+ current = (_a = current.left) !== null && _a !== void 0 ? _a : this.NIL;
373
318
  }
374
319
  else if (node.key > current.key) {
375
- current = (_b = current.right) !== null && _b !== void 0 ? _b : this.SENTINEL;
320
+ current = (_b = current.right) !== null && _b !== void 0 ? _b : this.NIL;
376
321
  }
377
322
  else {
378
323
  this._replaceNode(current, node);
@@ -389,8 +334,8 @@ class RedBlackTree extends bst_1.BST {
389
334
  else {
390
335
  parent.right = node;
391
336
  }
392
- node.left = this.SENTINEL;
393
- node.right = this.SENTINEL;
337
+ node.left = this.NIL;
338
+ node.right = this.NIL;
394
339
  node.color = 'RED';
395
340
  this._insertFixup(node);
396
341
  return 'CREATED';
@@ -1 +1 @@
1
- {"version":3,"file":"rb-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/rb-tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rb-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/rb-tree.ts"],"names":[],"mappings":"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"}
@@ -97,6 +97,12 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
97
97
  * @returns The size of the object, which is a number.
98
98
  */
99
99
  get size(): number;
100
+ protected _NIL: NODE;
101
+ /**
102
+ * The function returns the value of the _NIL property.
103
+ * @returns The method is returning the value of the `_NIL` property.
104
+ */
105
+ get NIL(): NODE;
100
106
  /**
101
107
  * Creates a new instance of BinaryTreeNode with the given key and value.
102
108
  * @param {K} key - The key for the new node.
@@ -140,19 +146,18 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
140
146
  * itself if it is not a valid node key.
141
147
  */
142
148
  ensureNode(keyOrNodeOrEntry: KeyOrNodeOrEntry<K, V, NODE>, iterationType?: IterationType): NODE | null | undefined;
149
+ /**
150
+ * The function checks if a given node is a real node or null.
151
+ * @param {any} node - The parameter `node` is of type `any`, which means it can be any data type.
152
+ * @returns a boolean value.
153
+ */
154
+ isNodeOrNull(node: KeyOrNodeOrEntry<K, V, NODE>): node is NODE | null;
143
155
  /**
144
156
  * The function "isNode" checks if an keyOrNodeOrEntry is an instance of the BinaryTreeNode class.
145
157
  * @param keyOrNodeOrEntry - The `keyOrNodeOrEntry` parameter is a variable of type `KeyOrNodeOrEntry<K, V,NODE>`.
146
158
  * @returns a boolean value indicating whether the keyOrNodeOrEntry is an instance of the class NODE.
147
159
  */
148
160
  isNode(keyOrNodeOrEntry: KeyOrNodeOrEntry<K, V, NODE>): keyOrNodeOrEntry is NODE;
149
- /**
150
- * The function checks if a given value is an entry in a binary tree node.
151
- * @param keyOrNodeOrEntry - KeyOrNodeOrEntry<K, V,NODE> - A generic type representing a node in a binary tree. It has
152
- * two type parameters V and NODE, representing the value and node type respectively.
153
- * @returns a boolean value.
154
- */
155
- isEntry(keyOrNodeOrEntry: KeyOrNodeOrEntry<K, V, NODE>): keyOrNodeOrEntry is BTNEntry<K, V>;
156
161
  /**
157
162
  * The function checks if a given node is a real node by verifying if it is an instance of
158
163
  * BinaryTreeNode and its key is not NaN.
@@ -167,11 +172,12 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
167
172
  */
168
173
  isNIL(node: KeyOrNodeOrEntry<K, V, NODE>): boolean;
169
174
  /**
170
- * The function checks if a given node is a real node or null.
171
- * @param {any} node - The parameter `node` is of type `any`, which means it can be any data type.
175
+ * The function checks if a given value is an entry in a binary tree node.
176
+ * @param keyOrNodeOrEntry - KeyOrNodeOrEntry<K, V,NODE> - A generic type representing a node in a binary tree. It has
177
+ * two type parameters V and NODE, representing the value and node type respectively.
172
178
  * @returns a boolean value.
173
179
  */
174
- isNodeOrNull(node: KeyOrNodeOrEntry<K, V, NODE>): node is NODE | null;
180
+ isEntry(keyOrNodeOrEntry: KeyOrNodeOrEntry<K, V, NODE>): keyOrNodeOrEntry is BTNEntry<K, V>;
175
181
  /**
176
182
  * Time Complexity O(n)
177
183
  * Space Complexity O(1)
@@ -143,6 +143,14 @@ export class BinaryTree extends IterableEntryBase {
143
143
  get size() {
144
144
  return this._size;
145
145
  }
146
+ _NIL = new BinaryTreeNode(NaN);
147
+ /**
148
+ * The function returns the value of the _NIL property.
149
+ * @returns The method is returning the value of the `_NIL` property.
150
+ */
151
+ get NIL() {
152
+ return this._NIL;
153
+ }
146
154
  /**
147
155
  * Creates a new instance of BinaryTreeNode with the given key and value.
148
156
  * @param {K} key - The key for the new node.
@@ -237,6 +245,14 @@ export class BinaryTree extends IterableEntryBase {
237
245
  return this.getNodeByKey(keyOrNodeOrEntry, iterationType);
238
246
  }
239
247
  }
248
+ /**
249
+ * The function checks if a given node is a real node or null.
250
+ * @param {any} node - The parameter `node` is of type `any`, which means it can be any data type.
251
+ * @returns a boolean value.
252
+ */
253
+ isNodeOrNull(node) {
254
+ return this.isRealNode(node) || node === null;
255
+ }
240
256
  /**
241
257
  * The function "isNode" checks if an keyOrNodeOrEntry is an instance of the BinaryTreeNode class.
242
258
  * @param keyOrNodeOrEntry - The `keyOrNodeOrEntry` parameter is a variable of type `KeyOrNodeOrEntry<K, V,NODE>`.
@@ -245,15 +261,6 @@ export class BinaryTree extends IterableEntryBase {
245
261
  isNode(keyOrNodeOrEntry) {
246
262
  return keyOrNodeOrEntry instanceof BinaryTreeNode;
247
263
  }
248
- /**
249
- * The function checks if a given value is an entry in a binary tree node.
250
- * @param keyOrNodeOrEntry - KeyOrNodeOrEntry<K, V,NODE> - A generic type representing a node in a binary tree. It has
251
- * two type parameters V and NODE, representing the value and node type respectively.
252
- * @returns a boolean value.
253
- */
254
- isEntry(keyOrNodeOrEntry) {
255
- return Array.isArray(keyOrNodeOrEntry) && keyOrNodeOrEntry.length === 2;
256
- }
257
264
  /**
258
265
  * The function checks if a given node is a real node by verifying if it is an instance of
259
266
  * BinaryTreeNode and its key is not NaN.
@@ -261,7 +268,9 @@ export class BinaryTree extends IterableEntryBase {
261
268
  * @returns a boolean value.
262
269
  */
263
270
  isRealNode(node) {
264
- return node instanceof BinaryTreeNode && String(node.key) !== 'NaN';
271
+ if (!this.isNode(node))
272
+ return false;
273
+ return node !== this.NIL;
265
274
  }
266
275
  /**
267
276
  * The function checks if a given node is a BinaryTreeNode instance and has a key value of NaN.
@@ -269,15 +278,16 @@ export class BinaryTree extends IterableEntryBase {
269
278
  * @returns a boolean value.
270
279
  */
271
280
  isNIL(node) {
272
- return node instanceof BinaryTreeNode && String(node.key) === 'NaN';
281
+ return node === this.NIL;
273
282
  }
274
283
  /**
275
- * The function checks if a given node is a real node or null.
276
- * @param {any} node - The parameter `node` is of type `any`, which means it can be any data type.
284
+ * The function checks if a given value is an entry in a binary tree node.
285
+ * @param keyOrNodeOrEntry - KeyOrNodeOrEntry<K, V,NODE> - A generic type representing a node in a binary tree. It has
286
+ * two type parameters V and NODE, representing the value and node type respectively.
277
287
  * @returns a boolean value.
278
288
  */
279
- isNodeOrNull(node) {
280
- return this.isRealNode(node) || node === null;
289
+ isEntry(keyOrNodeOrEntry) {
290
+ return Array.isArray(keyOrNodeOrEntry) && keyOrNodeOrEntry.length === 2;
281
291
  }
282
292
  /**
283
293
  * Time Complexity O(n)
@@ -504,10 +514,10 @@ export class BinaryTree extends IterableEntryBase {
504
514
  if (onlyOne)
505
515
  return;
506
516
  }
507
- if (!cur.left && !cur.right)
517
+ if (!this.isRealNode(cur.left) && !this.isRealNode(cur.right))
508
518
  return;
509
- cur.left && dfs(cur.left);
510
- cur.right && dfs(cur.right);
519
+ this.isRealNode(cur.left) && dfs(cur.left);
520
+ this.isRealNode(cur.right) && dfs(cur.right);
511
521
  };
512
522
  dfs(beginRoot);
513
523
  }
@@ -515,14 +525,14 @@ export class BinaryTree extends IterableEntryBase {
515
525
  const stack = [beginRoot];
516
526
  while (stack.length > 0) {
517
527
  const cur = stack.pop();
518
- if (cur) {
528
+ if (this.isRealNode(cur)) {
519
529
  if (callback(cur) === identifier) {
520
530
  ans.push(cur);
521
531
  if (onlyOne)
522
532
  return ans;
523
533
  }
524
- cur.left && stack.push(cur.left);
525
- cur.right && stack.push(cur.right);
534
+ this.isRealNode(cur.left) && stack.push(cur.left);
535
+ this.isRealNode(cur.right) && stack.push(cur.right);
526
536
  }
527
537
  }
528
538
  }
@@ -554,8 +564,6 @@ export class BinaryTree extends IterableEntryBase {
554
564
  * @returns a value of type `NODE | null | undefined`.
555
565
  */
556
566
  getNode(identifier, callback = this._DEFAULT_CALLBACK, beginRoot = this.root, iterationType = this.iterationType) {
557
- if ((!callback || callback === this._DEFAULT_CALLBACK) && identifier instanceof BinaryTreeNode)
558
- callback = (node => node);
559
567
  return this.getNodes(identifier, callback, true, beginRoot, iterationType)[0] ?? null;
560
568
  }
561
569
  /**
@@ -632,8 +640,6 @@ export class BinaryTree extends IterableEntryBase {
632
640
  * found, `undefined` is returned.
633
641
  */
634
642
  get(identifier, callback = this._DEFAULT_CALLBACK, beginRoot = this.root, iterationType = this.iterationType) {
635
- if ((!callback || callback === this._DEFAULT_CALLBACK) && identifier instanceof BinaryTreeNode)
636
- callback = (node => node);
637
643
  return this.getNode(identifier, callback, beginRoot, iterationType)?.value ?? undefined;
638
644
  }
639
645
  /**
@@ -6,7 +6,7 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import type { BSTNested, BSTNodeNested, BSTOptions, BTNCallback, KeyOrNodeOrEntry } from '../../types';
9
- import { BSTVariant, CP, DFSOrderPattern, IterationType } from '../../types';
9
+ import { BSTNKeyOrNode, BSTVariant, CP, DFSOrderPattern, IterationType } from '../../types';
10
10
  import { BinaryTree, BinaryTreeNode } from './binary-tree';
11
11
  import { IBinaryTree } from '../../interfaces';
12
12
  export declare class BSTNode<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BSTNodeNested<K, V>> extends BinaryTreeNode<K, V, NODE> {
@@ -209,6 +209,32 @@ export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BS
209
209
  * @returns The method returns an array of nodes (`NODE[]`).
210
210
  */
211
211
  getNodes<C extends BTNCallback<NODE>>(identifier: ReturnType<C> | undefined, callback?: C, onlyOne?: boolean, beginRoot?: KeyOrNodeOrEntry<K, V, NODE>, iterationType?: IterationType): NODE[];
212
+ /**
213
+ * Time Complexity: O(log n)
214
+ * Space Complexity: O(1)
215
+ */
216
+ /**
217
+ * Time Complexity: O(log n)
218
+ * Space Complexity: O(1)
219
+ *
220
+ * The `getNode` function retrieves a node from a Red-Black Tree based on the provided identifier and
221
+ * callback function.
222
+ * @param {ReturnType<C> | undefined} identifier - The `identifier` parameter is the value or key
223
+ * that you want to search for in the binary search tree. It can be of any type that is compatible
224
+ * with the type of nodes in the tree.
225
+ * @param {C} callback - The `callback` parameter is a function that will be called for each node in
226
+ * the tree. It is used to determine whether a node matches the given identifier. The `callback`
227
+ * function should take a node as its parameter and return a value that can be compared to the
228
+ * `identifier` parameter.
229
+ * @param beginRoot - The `beginRoot` parameter is the starting point for the search in the binary
230
+ * search tree. It can be either a key or a node. If it is a key, it will be converted to a node
231
+ * using the `ensureNode` method. If it is not provided, the `root`
232
+ * @param iterationType - The `iterationType` parameter is used to specify the type of iteration to
233
+ * be performed when searching for nodes in the binary search tree. It is an optional parameter and
234
+ * its default value is taken from the `iterationType` property of the class.
235
+ * @returns The method is returning a value of type `NODE | null | undefined`.
236
+ */
237
+ getNode<C extends BTNCallback<NODE>>(identifier: ReturnType<C> | undefined, callback?: C, beginRoot?: BSTNKeyOrNode<K, NODE>, iterationType?: IterationType): NODE | undefined;
212
238
  /**
213
239
  * Time complexity: O(n)
214
240
  * Space complexity: O(n)
@@ -486,6 +486,34 @@ export class BST extends BinaryTree {
486
486
  }
487
487
  return ans;
488
488
  }
489
+ /**
490
+ * Time Complexity: O(log n)
491
+ * Space Complexity: O(1)
492
+ */
493
+ /**
494
+ * Time Complexity: O(log n)
495
+ * Space Complexity: O(1)
496
+ *
497
+ * The `getNode` function retrieves a node from a Red-Black Tree based on the provided identifier and
498
+ * callback function.
499
+ * @param {ReturnType<C> | undefined} identifier - The `identifier` parameter is the value or key
500
+ * that you want to search for in the binary search tree. It can be of any type that is compatible
501
+ * with the type of nodes in the tree.
502
+ * @param {C} callback - The `callback` parameter is a function that will be called for each node in
503
+ * the tree. It is used to determine whether a node matches the given identifier. The `callback`
504
+ * function should take a node as its parameter and return a value that can be compared to the
505
+ * `identifier` parameter.
506
+ * @param beginRoot - The `beginRoot` parameter is the starting point for the search in the binary
507
+ * search tree. It can be either a key or a node. If it is a key, it will be converted to a node
508
+ * using the `ensureNode` method. If it is not provided, the `root`
509
+ * @param iterationType - The `iterationType` parameter is used to specify the type of iteration to
510
+ * be performed when searching for nodes in the binary search tree. It is an optional parameter and
511
+ * its default value is taken from the `iterationType` property of the class.
512
+ * @returns The method is returning a value of type `NODE | null | undefined`.
513
+ */
514
+ getNode(identifier, callback = this._DEFAULT_CALLBACK, beginRoot = this.root, iterationType = this.iterationType) {
515
+ return this.getNodes(identifier, callback, true, beginRoot, iterationType)[0] ?? undefined;
516
+ }
489
517
  /**
490
518
  * Time complexity: O(n)
491
519
  * Space complexity: O(n)
@@ -1,4 +1,4 @@
1
- import type { BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, IterationType, KeyOrNodeOrEntry, RBTreeOptions, RedBlackTreeNested, RedBlackTreeNodeNested } from '../../types';
1
+ import type { BinaryTreeDeleteResult, BTNCallback, KeyOrNodeOrEntry, RBTreeOptions, RedBlackTreeNested, RedBlackTreeNodeNested } from '../../types';
2
2
  import { CRUD, RBTNColor } from '../../types';
3
3
  import { BST, BSTNode } from './bst';
4
4
  import { IBinaryTree } from '../../interfaces';
@@ -39,12 +39,6 @@ export declare class RedBlackTree<K = any, V = any, NODE extends RedBlackTreeNod
39
39
  * should compare keys and
40
40
  */
41
41
  constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, options?: RBTreeOptions<K>);
42
- protected _SENTINEL: NODE;
43
- /**
44
- * The function returns the value of the _SENTINEL property.
45
- * @returns The method is returning the value of the `_SENTINEL` property.
46
- */
47
- get SENTINEL(): NODE;
48
42
  protected _root: NODE | undefined;
49
43
  /**
50
44
  * The function returns the root node of a tree or undefined if there is no root.
@@ -101,46 +95,6 @@ export declare class RedBlackTree<K = any, V = any, NODE extends RedBlackTreeNod
101
95
  * @returns {boolean} - `true` if the object is a Red-Black Tree node, `false` otherwise.
102
96
  */
103
97
  isNode(keyOrNodeOrEntry: KeyOrNodeOrEntry<K, V, NODE>): keyOrNodeOrEntry is NODE;
104
- /**
105
- * Time Complexity: O(1)
106
- * Space Complexity: O(1)
107
- */
108
- /**
109
- * Time Complexity: O(1)
110
- * Space Complexity: O(1)
111
- *
112
- * The function checks if a given node is a real node in a Red-Black Tree.
113
- * @param {NODE | undefined} node - The `node` parameter is of type `NODE | undefined`, which means
114
- * it can either be of type `NODE` or `undefined`.
115
- * @returns a boolean value.
116
- */
117
- isRealNode(node: NODE | undefined): node is NODE;
118
- /**
119
- * Time Complexity: O(log n)
120
- * Space Complexity: O(1)
121
- */
122
- /**
123
- * Time Complexity: O(log n)
124
- * Space Complexity: O(1)
125
- *
126
- * The `getNode` function retrieves a node from a Red-Black Tree based on the provided identifier and
127
- * callback function.
128
- * @param {ReturnType<C> | undefined} identifier - The `identifier` parameter is the value or key
129
- * that you want to search for in the binary search tree. It can be of any type that is compatible
130
- * with the type of nodes in the tree.
131
- * @param {C} callback - The `callback` parameter is a function that will be called for each node in
132
- * the tree. It is used to determine whether a node matches the given identifier. The `callback`
133
- * function should take a node as its parameter and return a value that can be compared to the
134
- * `identifier` parameter.
135
- * @param beginRoot - The `beginRoot` parameter is the starting point for the search in the binary
136
- * search tree. It can be either a key or a node. If it is a key, it will be converted to a node
137
- * using the `ensureNode` method. If it is not provided, the `root`
138
- * @param iterationType - The `iterationType` parameter is used to specify the type of iteration to
139
- * be performed when searching for nodes in the binary search tree. It is an optional parameter and
140
- * its default value is taken from the `iterationType` property of the class.
141
- * @returns The method is returning a value of type `NODE | null | undefined`.
142
- */
143
- getNode<C extends BTNCallback<NODE>>(identifier: ReturnType<C> | undefined, callback?: C, beginRoot?: BSTNKeyOrNode<K, NODE>, iterationType?: IterationType): NODE | null | undefined;
144
98
  /**
145
99
  * Time Complexity: O(1)
146
100
  * Space Complexity: O(1)
@@ -44,19 +44,11 @@ export class RedBlackTree extends BST {
44
44
  */
45
45
  constructor(keysOrNodesOrEntries = [], options) {
46
46
  super([], options);
47
- this._root = this.SENTINEL;
47
+ this._root = this.NIL;
48
48
  if (keysOrNodesOrEntries) {
49
49
  this.addMany(keysOrNodesOrEntries);
50
50
  }
51
51
  }
52
- _SENTINEL = new RedBlackTreeNode(NaN);
53
- /**
54
- * The function returns the value of the _SENTINEL property.
55
- * @returns The method is returning the value of the `_SENTINEL` property.
56
- */
57
- get SENTINEL() {
58
- return this._SENTINEL;
59
- }
60
52
  _root;
61
53
  /**
62
54
  * The function returns the root node of a tree or undefined if there is no root.
@@ -148,52 +140,6 @@ export class RedBlackTree extends BST {
148
140
  isNode(keyOrNodeOrEntry) {
149
141
  return keyOrNodeOrEntry instanceof RedBlackTreeNode;
150
142
  }
151
- /**
152
- * Time Complexity: O(1)
153
- * Space Complexity: O(1)
154
- */
155
- /**
156
- * Time Complexity: O(1)
157
- * Space Complexity: O(1)
158
- *
159
- * The function checks if a given node is a real node in a Red-Black Tree.
160
- * @param {NODE | undefined} node - The `node` parameter is of type `NODE | undefined`, which means
161
- * it can either be of type `NODE` or `undefined`.
162
- * @returns a boolean value.
163
- */
164
- isRealNode(node) {
165
- if (node === this.SENTINEL || node === undefined)
166
- return false;
167
- return node instanceof RedBlackTreeNode;
168
- }
169
- /**
170
- * Time Complexity: O(log n)
171
- * Space Complexity: O(1)
172
- */
173
- /**
174
- * Time Complexity: O(log n)
175
- * Space Complexity: O(1)
176
- *
177
- * The `getNode` function retrieves a node from a Red-Black Tree based on the provided identifier and
178
- * callback function.
179
- * @param {ReturnType<C> | undefined} identifier - The `identifier` parameter is the value or key
180
- * that you want to search for in the binary search tree. It can be of any type that is compatible
181
- * with the type of nodes in the tree.
182
- * @param {C} callback - The `callback` parameter is a function that will be called for each node in
183
- * the tree. It is used to determine whether a node matches the given identifier. The `callback`
184
- * function should take a node as its parameter and return a value that can be compared to the
185
- * `identifier` parameter.
186
- * @param beginRoot - The `beginRoot` parameter is the starting point for the search in the binary
187
- * search tree. It can be either a key or a node. If it is a key, it will be converted to a node
188
- * using the `ensureNode` method. If it is not provided, the `root`
189
- * @param iterationType - The `iterationType` parameter is used to specify the type of iteration to
190
- * be performed when searching for nodes in the binary search tree. It is an optional parameter and
191
- * its default value is taken from the `iterationType` property of the class.
192
- * @returns The method is returning a value of type `NODE | null | undefined`.
193
- */
194
- getNode(identifier, callback = this._DEFAULT_CALLBACK, beginRoot = this.root, iterationType = this.iterationType) {
195
- return this.getNodes(identifier, callback, true, beginRoot, iterationType)[0] ?? undefined;
196
- }
197
143
  /**
198
144
  * Time Complexity: O(1)
199
145
  * Space Complexity: O(1)
@@ -207,7 +153,7 @@ export class RedBlackTree extends BST {
207
153
  */
208
154
  clear() {
209
155
  super.clear();
210
- this._root = this.SENTINEL;
156
+ this._root = this.NIL;
211
157
  }
212
158
  /**
213
159
  * Time Complexity: O(log n)
@@ -368,10 +314,10 @@ export class RedBlackTree extends BST {
368
314
  while (this.isRealNode(current)) {
369
315
  parent = current;
370
316
  if (node.key < current.key) {
371
- current = current.left ?? this.SENTINEL;
317
+ current = current.left ?? this.NIL;
372
318
  }
373
319
  else if (node.key > current.key) {
374
- current = current.right ?? this.SENTINEL;
320
+ current = current.right ?? this.NIL;
375
321
  }
376
322
  else {
377
323
  this._replaceNode(current, node);
@@ -388,8 +334,8 @@ export class RedBlackTree extends BST {
388
334
  else {
389
335
  parent.right = node;
390
336
  }
391
- node.left = this.SENTINEL;
392
- node.right = this.SENTINEL;
337
+ node.left = this.NIL;
338
+ node.right = this.NIL;
393
339
  node.color = 'RED';
394
340
  this._insertFixup(node);
395
341
  return 'CREATED';