data-structure-typed 1.54.1 → 1.54.3

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 (113) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/LICENSE +2 -2
  3. package/README.md +14 -1
  4. package/README_zh-CN.md +1 -1
  5. package/benchmark/report.html +4 -1
  6. package/benchmark/report.json +76 -17
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
  8. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +8 -7
  9. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  10. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -12
  11. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -2
  12. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +25 -21
  14. package/dist/cjs/data-structures/binary-tree/avl-tree.js +12 -8
  15. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  16. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +111 -225
  17. package/dist/cjs/data-structures/binary-tree/binary-tree.js +177 -144
  18. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  19. package/dist/cjs/data-structures/binary-tree/bst.d.ts +59 -53
  20. package/dist/cjs/data-structures/binary-tree/bst.js +75 -119
  21. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  22. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +18 -18
  23. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +6 -6
  24. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  25. package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +19 -19
  26. package/dist/cjs/data-structures/binary-tree/tree-counter.js +12 -12
  27. package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
  28. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
  29. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +2 -2
  30. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  31. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
  32. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +1 -1
  33. package/dist/cjs/types/data-structures/binary-tree/index.d.ts +1 -1
  34. package/dist/cjs/types/data-structures/binary-tree/index.js +1 -1
  35. package/dist/cjs/types/data-structures/binary-tree/index.js.map +1 -1
  36. package/dist/cjs/types/data-structures/binary-tree/{rb-tree.js → red-black-tree.js} +1 -1
  37. package/dist/cjs/types/data-structures/binary-tree/red-black-tree.js.map +1 -0
  38. package/dist/cjs/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  39. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  40. package/dist/cjs/utils/utils.d.ts +2 -2
  41. package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
  42. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +9 -8
  43. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  44. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -12
  45. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +3 -3
  46. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  47. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +25 -21
  48. package/dist/esm/data-structures/binary-tree/avl-tree.js +13 -9
  49. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
  50. package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +111 -225
  51. package/dist/esm/data-structures/binary-tree/binary-tree.js +181 -148
  52. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
  53. package/dist/esm/data-structures/binary-tree/bst.d.ts +59 -53
  54. package/dist/esm/data-structures/binary-tree/bst.js +76 -120
  55. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
  56. package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +18 -18
  57. package/dist/esm/data-structures/binary-tree/red-black-tree.js +7 -7
  58. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
  59. package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +19 -19
  60. package/dist/esm/data-structures/binary-tree/tree-counter.js +13 -13
  61. package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
  62. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
  63. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +3 -3
  64. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  65. package/dist/esm/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
  66. package/dist/esm/types/data-structures/binary-tree/bst.d.ts +1 -1
  67. package/dist/esm/types/data-structures/binary-tree/index.d.ts +1 -1
  68. package/dist/esm/types/data-structures/binary-tree/index.js +1 -1
  69. package/dist/esm/types/data-structures/binary-tree/index.js.map +1 -1
  70. package/dist/esm/types/data-structures/binary-tree/red-black-tree.js +2 -0
  71. package/dist/esm/types/data-structures/binary-tree/red-black-tree.js.map +1 -0
  72. package/dist/esm/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  73. package/dist/esm/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  74. package/dist/esm/utils/utils.d.ts +2 -2
  75. package/dist/umd/data-structure-typed.js +296 -279
  76. package/dist/umd/data-structure-typed.min.js +5 -12
  77. package/dist/umd/data-structure-typed.min.js.map +1 -1
  78. package/package.json +9 -14
  79. package/src/data-structures/binary-tree/avl-tree-counter.ts +30 -23
  80. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +25 -15
  81. package/src/data-structures/binary-tree/avl-tree.ts +35 -29
  82. package/src/data-structures/binary-tree/binary-tree.ts +469 -252
  83. package/src/data-structures/binary-tree/bst.ts +141 -143
  84. package/src/data-structures/binary-tree/red-black-tree.ts +27 -35
  85. package/src/data-structures/binary-tree/tree-counter.ts +33 -27
  86. package/src/data-structures/binary-tree/tree-multi-map.ts +25 -17
  87. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -0
  88. package/src/types/data-structures/binary-tree/bst.ts +1 -1
  89. package/src/types/data-structures/binary-tree/index.ts +1 -1
  90. package/src/types/data-structures/binary-tree/tree-counter.ts +1 -1
  91. package/src/types/data-structures/binary-tree/tree-multi-map.ts +1 -1
  92. package/src/utils/utils.ts +2 -2
  93. package/test/integration/compile.mjs +135 -0
  94. package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +71 -0
  95. package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +81 -0
  96. package/test/performance/reportor.mjs +505 -0
  97. package/test/performance/reportor.ts +1 -1
  98. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +7 -7
  99. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +5 -6
  100. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +72 -5
  101. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +132 -82
  102. package/test/unit/data-structures/binary-tree/bst.test.ts +12 -12
  103. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +4 -12
  104. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +4 -4
  105. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +6 -6
  106. package/test/utils/json2html.ts +0 -154
  107. package/dist/cjs/types/data-structures/binary-tree/rb-tree.js.map +0 -1
  108. package/dist/esm/types/data-structures/binary-tree/rb-tree.js +0 -2
  109. package/dist/esm/types/data-structures/binary-tree/rb-tree.js.map +0 -1
  110. /package/dist/cjs/types/data-structures/binary-tree/{rb-tree.d.ts → red-black-tree.d.ts} +0 -0
  111. /package/dist/esm/types/data-structures/binary-tree/{rb-tree.d.ts → red-black-tree.d.ts} +0 -0
  112. /package/src/types/data-structures/binary-tree/{rb-tree.ts → red-black-tree.ts} +0 -0
  113. /package/test/performance/data-structures/binary-tree/{rb-tree.test.ts → red-black-tree.test.ts} +0 -0
@@ -3,6 +3,7 @@ import { Queue } from '../queue';
3
3
  import { isComparable } from '../../utils';
4
4
  import { Range } from '../../common';
5
5
  export class BSTNode extends BinaryTreeNode {
6
+ parent = undefined;
6
7
  /**
7
8
  * This TypeScript constructor function initializes an instance with a key and an optional value.
8
9
  * @param {K} key - The `key` parameter is typically used to uniquely identify an object or element
@@ -15,7 +16,6 @@ export class BSTNode extends BinaryTreeNode {
15
16
  constructor(key, value) {
16
17
  super(key, value);
17
18
  }
18
- parent = undefined;
19
19
  _left = undefined;
20
20
  get left() {
21
21
  return this._left;
@@ -107,7 +107,7 @@ export class BST extends BinaryTree {
107
107
  * This TypeScript constructor initializes a binary search tree with optional options and adds
108
108
  * elements if provided.
109
109
  * @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter in the constructor is an
110
- * iterable that can contain elements of type `BTNRep<K, V, BSTNode<K, V>>` or `R`. It is used to
110
+ * iterable that can contain elements of type `K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined ` or `R`. It is used to
111
111
  * initialize the binary search tree with keys, nodes, entries, or raw data.
112
112
  * @param [options] - The `options` parameter is an optional object that can contain the following
113
113
  * properties:
@@ -199,7 +199,7 @@ export class BST extends BinaryTree {
199
199
  *
200
200
  * The function ensures the existence of a node in a data structure and returns it, or undefined if
201
201
  * it doesn't exist.
202
- * @param {BTNRep<K, V, BSTNode<K, V>>} keyNodeOrEntry - The parameter
202
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - The parameter
203
203
  * `keyNodeOrEntry` can accept a value of type `R`, which represents the key, node,
204
204
  * entry, or raw element that needs to be ensured in the tree.
205
205
  * @param {IterationType} [iterationType=ITERATIVE] - The `iterationType` parameter is an optional
@@ -216,8 +216,8 @@ export class BST extends BinaryTree {
216
216
  * Space Complexity: O(1)
217
217
  *
218
218
  * The function checks if the input is an instance of the BSTNode class.
219
- * @param {BTNRep<K, V, BSTNode<K, V>>} keyNodeOrEntry - The parameter
220
- * `keyNodeOrEntry` can be of type `R` or `BTNRep<K, V, BSTNode<K, V>>`.
219
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - The parameter
220
+ * `keyNodeOrEntry` can be of type `R` or `K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined `.
221
221
  * @returns a boolean value indicating whether the input parameter `keyNodeOrEntry` is
222
222
  * an instance of the `BSTNode` class.
223
223
  */
@@ -243,8 +243,8 @@ export class BST extends BinaryTree {
243
243
  * Space Complexity: O(log n)
244
244
  *
245
245
  * The `add` function in TypeScript adds a new node to a binary search tree based on the key value.
246
- * @param {BTNRep<K, V, BSTNode<K, V>>} keyNodeOrEntry - The parameter
247
- * `keyNodeOrEntry` can accept a value of type `R` or `BTNRep<K, V, BSTNode<K, V>>`.
246
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - The parameter
247
+ * `keyNodeOrEntry` can accept a value of type `R` or `K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined `.
248
248
  * @param {V} [value] - The `value` parameter is an optional value that can be associated with the
249
249
  * key in the binary search tree. If provided, it will be stored in the node along with the key.
250
250
  * @returns a boolean value.
@@ -413,7 +413,7 @@ export class BST extends BinaryTree {
413
413
  *
414
414
  * The function `search` in TypeScript overrides the search behavior in a binary tree structure based
415
415
  * on specified criteria.
416
- * @param {BTNRep<K, V, BSTNode<K, V>> | NodePredicate<BSTNode<K, V>>} keyNodeEntryOrPredicate - The
416
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined | NodePredicate<BSTNode<K, V>>} keyNodeEntryOrPredicate - The
417
417
  * `keyNodeEntryOrPredicate` parameter in the `override search` method can accept one of the
418
418
  * following types:
419
419
  * @param [onlyOne=false] - The `onlyOne` parameter is a boolean flag that determines whether the
@@ -421,9 +421,9 @@ export class BST extends BinaryTree {
421
421
  * search will return as soon as a matching node is found. If `onlyOne` is set to `false`, the
422
422
  * @param {C} callback - The `callback` parameter in the `override search` function is a function
423
423
  * that will be called on each node that matches the search criteria. It is of type `C`, which
424
- * extends `NodeCallback<BSTNode<K, V>>`. The callback function should accept a node of type `BSTNode<K, V>` as its
424
+ * extends `NodeCallback<BSTNode<K, V> | null>`. The callback function should accept a node of type `BSTNode<K, V>` as its
425
425
  * argument and
426
- * @param {BTNRep<K, V, BSTNode<K, V>>} startNode - The `startNode` parameter in the `override search`
426
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } startNode - The `startNode` parameter in the `override search`
427
427
  * method represents the node from which the search operation will begin. It is the starting point
428
428
  * for searching within the tree data structure. The method ensures that the `startNode` is a valid
429
429
  * node before proceeding with the search operation. If the `
@@ -447,104 +447,54 @@ export class BST extends BinaryTree {
447
447
  const isRange = this.isRange(keyNodeEntryOrPredicate);
448
448
  // Set predicate based on parameter type
449
449
  if (isRange) {
450
- predicate = node => keyNodeEntryOrPredicate.isInRange(node.key, this._comparator);
450
+ predicate = node => {
451
+ if (!node)
452
+ return false;
453
+ return keyNodeEntryOrPredicate.isInRange(node.key, this._comparator);
454
+ };
451
455
  }
452
456
  else {
453
457
  predicate = this._ensurePredicate(keyNodeEntryOrPredicate);
454
458
  }
455
- const isToLeftByRange = (cur) => {
459
+ const shouldVisitLeft = (cur) => {
460
+ if (!cur)
461
+ return false;
462
+ if (!this.isRealNode(cur.left))
463
+ return false;
456
464
  if (isRange) {
457
465
  const range = keyNodeEntryOrPredicate;
458
466
  const leftS = this.isReverse ? range.high : range.low;
459
467
  const leftI = this.isReverse ? range.includeHigh : range.includeLow;
460
468
  return (leftI && this._compare(cur.key, leftS) >= 0) || (!leftI && this._compare(cur.key, leftS) > 0);
461
469
  }
462
- return false;
470
+ if (!isRange && !this._isPredicate(keyNodeEntryOrPredicate)) {
471
+ const benchmarkKey = this._extractKey(keyNodeEntryOrPredicate);
472
+ return benchmarkKey !== null && benchmarkKey !== undefined && this._compare(cur.key, benchmarkKey) > 0;
473
+ }
474
+ return true;
463
475
  };
464
- const isToRightByRange = (cur) => {
476
+ const shouldVisitRight = (cur) => {
477
+ if (!cur)
478
+ return false;
479
+ if (!this.isRealNode(cur.right))
480
+ return false;
465
481
  if (isRange) {
466
482
  const range = keyNodeEntryOrPredicate;
467
483
  const rightS = this.isReverse ? range.low : range.high;
468
484
  const rightI = this.isReverse ? range.includeLow : range.includeLow;
469
485
  return (rightI && this._compare(cur.key, rightS) <= 0) || (!rightI && this._compare(cur.key, rightS) < 0);
470
486
  }
471
- return false;
472
- };
473
- const ans = [];
474
- if (iterationType === 'RECURSIVE') {
475
- const dfs = (cur) => {
476
- if (predicate(cur)) {
477
- ans.push(callback(cur));
478
- if (onlyOne)
479
- return;
480
- }
481
- if (!this.isRealNode(cur.left) && !this.isRealNode(cur.right))
482
- return;
483
- if (isRange) {
484
- if (this.isRealNode(cur.left) && isToLeftByRange(cur))
485
- dfs(cur.left);
486
- if (this.isRealNode(cur.right) && isToRightByRange(cur))
487
- dfs(cur.right);
488
- }
489
- else if (!this._isPredicate(keyNodeEntryOrPredicate)) {
490
- const benchmarkKey = this._extractKey(keyNodeEntryOrPredicate);
491
- if (this.isRealNode(cur.left) &&
492
- benchmarkKey !== null &&
493
- benchmarkKey !== undefined &&
494
- this._compare(cur.key, benchmarkKey) > 0)
495
- dfs(cur.left);
496
- if (this.isRealNode(cur.right) &&
497
- benchmarkKey !== null &&
498
- benchmarkKey !== undefined &&
499
- this._compare(cur.key, benchmarkKey) < 0)
500
- dfs(cur.right);
501
- }
502
- else {
503
- if (this.isRealNode(cur.left))
504
- dfs(cur.left);
505
- if (this.isRealNode(cur.right))
506
- dfs(cur.right);
507
- }
508
- };
509
- dfs(startNode);
510
- }
511
- else {
512
- const stack = [startNode];
513
- while (stack.length > 0) {
514
- const cur = stack.pop();
515
- if (predicate(cur)) {
516
- ans.push(callback(cur));
517
- if (onlyOne)
518
- return ans;
519
- }
520
- if (isRange) {
521
- if (this.isRealNode(cur.left) && isToLeftByRange(cur))
522
- stack.push(cur.left);
523
- if (this.isRealNode(cur.right) && isToRightByRange(cur))
524
- stack.push(cur.right);
525
- }
526
- else if (!this._isPredicate(keyNodeEntryOrPredicate)) {
527
- const benchmarkKey = this._extractKey(keyNodeEntryOrPredicate);
528
- if (this.isRealNode(cur.right) &&
529
- benchmarkKey !== null &&
530
- benchmarkKey !== undefined &&
531
- this._compare(cur.key, benchmarkKey) < 0)
532
- stack.push(cur.right);
533
- if (this.isRealNode(cur.left) &&
534
- benchmarkKey !== null &&
535
- benchmarkKey !== undefined &&
536
- this._compare(cur.key, benchmarkKey) > 0)
537
- stack.push(cur.left);
538
- }
539
- else {
540
- if (this.isRealNode(cur.right))
541
- stack.push(cur.right);
542
- if (this.isRealNode(cur.left))
543
- stack.push(cur.left);
544
- }
487
+ if (!isRange && !this._isPredicate(keyNodeEntryOrPredicate)) {
488
+ const benchmarkKey = this._extractKey(keyNodeEntryOrPredicate);
489
+ return benchmarkKey !== null && benchmarkKey !== undefined && this._compare(cur.key, benchmarkKey) < 0;
545
490
  }
546
- }
547
- return ans;
491
+ return true;
492
+ };
493
+ return super._dfs(callback, 'IN', onlyOne, startNode, iterationType, false, shouldVisitLeft, shouldVisitRight, () => true, cur => {
494
+ if (cur)
495
+ return predicate(cur);
496
+ return false;
497
+ });
548
498
  }
549
499
  /**
550
500
  * Time Complexity: O(log n)
@@ -555,9 +505,9 @@ export class BST extends BinaryTree {
555
505
  * either a `Range` object or an array of two elements representing the range boundaries.
556
506
  * @param {C} callback - The `callback` parameter in the `rangeSearch` function is a callback
557
507
  * function that is used to process each node that is found within the specified range during the
558
- * search operation. It is of type `NodeCallback<BSTNode<K, V>>`, where `BSTNode<K, V>` is the type of nodes in the
508
+ * search operation. It is of type `NodeCallback<BSTNode<K, V> | null>`, where `BSTNode<K, V>` is the type of nodes in the
559
509
  * data structure.
560
- * @param {BTNRep<K, V, BSTNode<K, V>>} startNode - The `startNode` parameter in the `rangeSearch`
510
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } startNode - The `startNode` parameter in the `rangeSearch`
561
511
  * function represents the node from which the search for nodes within the specified range will
562
512
  * begin. It is the starting point for the range search operation.
563
513
  * @param {IterationType} iterationType - The `iterationType` parameter in the `rangeSearch` function
@@ -576,8 +526,8 @@ export class BST extends BinaryTree {
576
526
  * Space Complexity: O(log n)
577
527
  *
578
528
  * This function retrieves a node based on a given keyNodeEntryOrPredicate within a binary search tree structure.
579
- * @param {BTNRep<K, V, BSTNode<K, V>> | NodePredicate<BSTNode<K, V>>} keyNodeEntryOrPredicate - The `keyNodeEntryOrPredicate`
580
- * parameter can be of type `BTNRep<K, V, BSTNode<K, V>>`, `R`, or `NodePredicate<BSTNode<K, V>>`.
529
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined | NodePredicate<BSTNode<K, V>>} keyNodeEntryOrPredicate - The `keyNodeEntryOrPredicate`
530
+ * parameter can be of type `K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined `, `R`, or `NodePredicate<BSTNode<K, V>>`.
581
531
  * @param {BSTNOptKeyOrNode<K, BSTNode<K, V>>} startNode - The `startNode` parameter in the `getNode` method
582
532
  * is used to specify the starting point for searching nodes in the binary search tree. If no
583
533
  * specific starting point is provided, the default value is set to `this._root`, which is the root
@@ -598,24 +548,30 @@ export class BST extends BinaryTree {
598
548
  * Time complexity: O(n)
599
549
  * Space complexity: O(n)
600
550
  *
601
- * The function overrides the depth-first search method and returns an array of the return types of
602
- * the callback function.
551
+ * The function `dfs` in TypeScript overrides the base class method with default parameters and
552
+ * returns the result of the super class `dfs` method.
603
553
  * @param {C} callback - The `callback` parameter is a function that will be called for each node
604
- * during the depth-first search traversal. It is an optional parameter and defaults to
605
- * `this._DEFAULT_NODE_CALLBACK`. The type `C` represents the type of the callback function.
606
- * @param {DFSOrderPattern} [pattern=IN] - The "pattern" parameter in the code snippet refers to the
607
- * order in which the Depth-First Search (DFS) algorithm visits the nodes in a tree or graph. It can
608
- * take one of the following values:
609
- * @param {BTNRep<K, V, BSTNode<K, V>>} startNode - The `startNode` parameter is the starting
610
- * point for the depth-first search traversal. It can be either a root node, a key-value pair, or a
611
- * node entry. If not specified, the default value is the root of the tree.
612
- * @param {IterationType} [iterationType=ITERATIVE] - The `iterationType` parameter specifies the
613
- * type of iteration to be used during the Depth-First Search (DFS) traversal. It can have one of the
614
- * following values:
615
- * @returns The method is returning an array of the return type of the callback function.
554
+ * visited during the Depth-First Search traversal. It is a generic type `C` that extends the
555
+ * `NodeCallback` interface for `BSTNode<K, V>`. The default value for `callback` is `this._
556
+ * @param {DFSOrderPattern} [pattern=IN] - The `pattern` parameter in the `override dfs` method
557
+ * specifies the order in which the Depth-First Search (DFS) traversal should be performed on the
558
+ * Binary Search Tree (BST). The possible values for the `pattern` parameter are:
559
+ * @param {boolean} [onlyOne=false] - The `onlyOne` parameter in the `override dfs` method is a
560
+ * boolean flag that indicates whether you want to stop the depth-first search traversal after
561
+ * finding the first matching node or continue searching for all matching nodes. If `onlyOne` is set
562
+ * to `true`, the traversal will stop after finding
563
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} startNode -
564
+ * The `startNode` parameter in the `override dfs` method can be one of the following types:
565
+ * @param {IterationType} iterationType - The `iterationType` parameter in the `override dfs` method
566
+ * specifies the type of iteration to be performed during the Depth-First Search (DFS) traversal of a
567
+ * Binary Search Tree (BST). It is used to determine the order in which nodes are visited during the
568
+ * traversal. The possible values for `
569
+ * @returns The `override` function is returning the result of calling the `dfs` method from the
570
+ * superclass, with the provided arguments `callback`, `pattern`, `onlyOne`, `startNode`, and
571
+ * `iterationType`. The return type is an array of the return type of the callback function `C`.
616
572
  */
617
- dfs(callback = this._DEFAULT_NODE_CALLBACK, pattern = 'IN', startNode = this._root, iterationType = this.iterationType) {
618
- return super.dfs(callback, pattern, startNode, iterationType);
573
+ dfs(callback = this._DEFAULT_NODE_CALLBACK, pattern = 'IN', onlyOne = false, startNode = this._root, iterationType = this.iterationType) {
574
+ return super.dfs(callback, pattern, onlyOne, startNode, iterationType);
619
575
  }
620
576
  /**
621
577
  * Time complexity: O(n)
@@ -626,7 +582,7 @@ export class BST extends BinaryTree {
626
582
  * @param {C} callback - The `callback` parameter is a function that will be called for each node
627
583
  * visited during the breadth-first search. It should take a single argument, which is the current
628
584
  * node being visited, and it can return a value of any type.
629
- * @param {BTNRep<K, V, BSTNode<K, V>>} startNode - The `startNode` parameter is the starting
585
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } startNode - The `startNode` parameter is the starting
630
586
  * point for the breadth-first search. It can be either a root node, a key-value pair, or an entry
631
587
  * object. If no value is provided, the default value is the root of the tree.
632
588
  * @param {IterationType} iterationType - The `iterationType` parameter is used to specify the type
@@ -644,9 +600,9 @@ export class BST extends BinaryTree {
644
600
  * The function overrides the listLevels method from the superclass and returns an array of arrays
645
601
  * containing the results of the callback function applied to each level of the tree.
646
602
  * @param {C} callback - The `callback` parameter is a generic type `C` that extends
647
- * `NodeCallback<BSTNode<K, V>>`. It represents a callback function that will be called for each node in the
603
+ * `NodeCallback<BSTNode<K, V> | null>`. It represents a callback function that will be called for each node in the
648
604
  * tree during the iteration process.
649
- * @param {BTNRep<K, V, BSTNode<K, V>>} startNode - The `startNode` parameter is the starting
605
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } startNode - The `startNode` parameter is the starting
650
606
  * point for listing the levels of the binary tree. It can be either a root node of the tree, a
651
607
  * key-value pair representing a node in the tree, or a key representing a node in the tree. If no
652
608
  * value is provided, the root of
@@ -670,7 +626,7 @@ export class BST extends BinaryTree {
670
626
  * @param {CP} lesserOrGreater - The `lesserOrGreater` parameter is used to determine whether to
671
627
  * traverse nodes that are lesser, greater, or both than the `targetNode`. It accepts the values -1,
672
628
  * 0, or 1, where:
673
- * @param {BTNRep<K, V, BSTNode<K, V>>} targetNode - The `targetNode` parameter is the node in
629
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } targetNode - The `targetNode` parameter is the node in
674
630
  * the binary tree that you want to start traversing from. It can be specified either by providing
675
631
  * the key of the node, the node itself, or an entry containing the key and value of the node. If no
676
632
  * `targetNode` is provided,
@@ -741,9 +697,9 @@ export class BST extends BinaryTree {
741
697
  return;
742
698
  const m = l + Math.floor((r - l) / 2);
743
699
  const midNode = sorted[m];
744
- if (this._isMapMode)
700
+ if (this._isMapMode && midNode !== null)
745
701
  this.add(midNode.key);
746
- else
702
+ else if (midNode !== null)
747
703
  this.add([midNode.key, midNode.value]);
748
704
  buildBalanceBST(l, m - 1);
749
705
  buildBalanceBST(m + 1, r);
@@ -760,9 +716,9 @@ export class BST extends BinaryTree {
760
716
  if (l <= r) {
761
717
  const m = l + Math.floor((r - l) / 2);
762
718
  const midNode = sorted[m];
763
- if (this._isMapMode)
719
+ if (this._isMapMode && midNode !== null)
764
720
  this.add(midNode.key);
765
- else
721
+ else if (midNode !== null)
766
722
  this.add([midNode.key, midNode.value]);
767
723
  stack.push([m + 1, r]);
768
724
  stack.push([l, m - 1]);
@@ -875,8 +831,8 @@ export class BST extends BinaryTree {
875
831
  * Space Complexity: O(1)
876
832
  *
877
833
  * The function overrides a method and converts a key, value pair or entry or raw element to a node.
878
- * @param {BTNRep<K, V, BSTNode<K, V>>} keyNodeOrEntry - A variable that can be of
879
- * type R or BTNRep<K, V, BSTNode<K, V>>. It represents either a key, a node, an entry, or a raw
834
+ * @param {K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - A variable that can be of
835
+ * type R or K | BSTNode<K, V> | [K | null | undefined, V | undefined] | null | undefined . It represents either a key, a node, an entry, or a raw
880
836
  * element.
881
837
  * @param {V} [value] - The `value` parameter is an optional value of type `V`. It represents the
882
838
  * value associated with a key in a key-value pair.
@@ -1 +1 @@
1
- {"version":3,"file":"bst.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/bst.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bst.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/bst.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { BinaryTreeDeleteResult, BTNRep, CRUD, EntryCallback, OptNodeOrNull, RBTNColor, RedBlackTreeOptions } from '../../types';
1
+ import type { BinaryTreeDeleteResult, CRUD, EntryCallback, RBTNColor, RedBlackTreeOptions } from '../../types';
2
2
  import { BST, BSTNode } from './bst';
3
3
  import { IBinaryTree } from '../../interfaces';
4
4
  export declare class RedBlackTreeNode<K = any, V = any> extends BSTNode<K, V> {
5
+ parent?: RedBlackTreeNode<K, V>;
5
6
  /**
6
7
  * The constructor initializes a node with a key, value, and color for a Red-Black Tree.
7
8
  * @param {K} key - The `key` parameter is a key of type `K` that is used to identify the node in a
@@ -13,13 +14,12 @@ export declare class RedBlackTreeNode<K = any, V = any> extends BSTNode<K, V> {
13
14
  * explicitly.
14
15
  */
15
16
  constructor(key: K, value?: V, color?: RBTNColor);
16
- parent?: RedBlackTreeNode<K, V>;
17
- _left?: OptNodeOrNull<RedBlackTreeNode<K, V>>;
18
- get left(): OptNodeOrNull<RedBlackTreeNode<K, V>>;
19
- set left(v: OptNodeOrNull<RedBlackTreeNode<K, V>>);
20
- _right?: OptNodeOrNull<RedBlackTreeNode<K, V>>;
21
- get right(): OptNodeOrNull<RedBlackTreeNode<K, V>>;
22
- set right(v: OptNodeOrNull<RedBlackTreeNode<K, V>>);
17
+ _left?: RedBlackTreeNode<K, V> | null | undefined;
18
+ get left(): RedBlackTreeNode<K, V> | null | undefined;
19
+ set left(v: RedBlackTreeNode<K, V> | null | undefined);
20
+ _right?: RedBlackTreeNode<K, V> | null | undefined;
21
+ get right(): RedBlackTreeNode<K, V> | null | undefined;
22
+ set right(v: RedBlackTreeNode<K, V> | null | undefined);
23
23
  }
24
24
  /**
25
25
  * 1. Efficient self-balancing, but not completely balanced. Compared with AVLTree, the addition and deletion efficiency is high but the query efficiency is slightly lower.
@@ -79,14 +79,14 @@ export declare class RedBlackTree<K = any, V = any, R = object, MK = any, MV = a
79
79
  * This TypeScript constructor initializes a Red-Black Tree with optional keys, nodes, entries, or
80
80
  * raw data.
81
81
  * @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter in the constructor is an
82
- * iterable that can contain either `BTNRep<K, V, RedBlackTreeNode<K, V>>` objects or `R` objects. It
82
+ * iterable that can contain either `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined` objects or `R` objects. It
83
83
  * is used to initialize the Red-Black Tree with keys, nodes, entries, or
84
84
  * @param [options] - The `options` parameter in the constructor is of type `RedBlackTreeOptions<K,
85
85
  * V, R>`. It is an optional parameter that allows you to specify additional options for the
86
86
  * RedBlackTree class. These options could include configuration settings, behavior customization, or
87
87
  * any other parameters that are specific to
88
88
  */
89
- constructor(keysNodesEntriesOrRaws?: Iterable<BTNRep<K, V, RedBlackTreeNode<K, V>> | R>, options?: RedBlackTreeOptions<K, V, R>);
89
+ constructor(keysNodesEntriesOrRaws?: Iterable<K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined | R>, options?: RedBlackTreeOptions<K, V, R>);
90
90
  protected _root: RedBlackTreeNode<K, V> | undefined;
91
91
  get root(): RedBlackTreeNode<K, V> | undefined;
92
92
  /**
@@ -122,12 +122,12 @@ export declare class RedBlackTree<K = any, V = any, R = object, MK = any, MV = a
122
122
  * Space Complexity: O(1)
123
123
  *
124
124
  * The function checks if the input is an instance of the RedBlackTreeNode class.
125
- * @param {BTNRep<K, V, RedBlackTreeNode<K, V>>} keyNodeOrEntry - The parameter
126
- * `keyNodeOrEntry` can be of type `R` or `BTNRep<K, V, RedBlackTreeNode<K, V>>`.
125
+ * @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The parameter
126
+ * `keyNodeOrEntry` can be of type `R` or `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined`.
127
127
  * @returns a boolean value indicating whether the input parameter `keyNodeOrEntry` is
128
128
  * an instance of the `RedBlackTreeNode` class.
129
129
  */
130
- isNode(keyNodeOrEntry: BTNRep<K, V, RedBlackTreeNode<K, V>>): keyNodeOrEntry is RedBlackTreeNode<K, V>;
130
+ isNode(keyNodeOrEntry: K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined): keyNodeOrEntry is RedBlackTreeNode<K, V>;
131
131
  /**
132
132
  * Time Complexity: O(1)
133
133
  * Space Complexity: O(1)
@@ -142,8 +142,8 @@ export declare class RedBlackTree<K = any, V = any, R = object, MK = any, MV = a
142
142
  *
143
143
  * The function adds a new node to a binary search tree and returns true if the node was successfully
144
144
  * added.
145
- * @param {BTNRep<K, V, RedBlackTreeNode<K, V>>} keyNodeOrEntry - The parameter
146
- * `keyNodeOrEntry` can accept a value of type `R` or `BTNRep<K, V, RedBlackTreeNode<K, V>>`.
145
+ * @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The parameter
146
+ * `keyNodeOrEntry` can accept a value of type `R` or `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined`.
147
147
  * @param {V} [value] - The `value` parameter is an optional value that you want to associate with
148
148
  * the key in the data structure. It represents the value that you want to add or update in the data
149
149
  * structure.
@@ -151,14 +151,14 @@ export declare class RedBlackTree<K = any, V = any, R = object, MK = any, MV = a
151
151
  * the method returns true. If the node already exists and its value is updated, the method also
152
152
  * returns true. If the node cannot be added or updated, the method returns false.
153
153
  */
154
- add(keyNodeOrEntry: BTNRep<K, V, RedBlackTreeNode<K, V>>, value?: V): boolean;
154
+ add(keyNodeOrEntry: K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined, value?: V): boolean;
155
155
  /**
156
156
  * Time Complexity: O(log n)
157
157
  * Space Complexity: O(log n)
158
158
  *
159
159
  * The function overrides the delete method in a binary tree data structure to remove a node based on
160
160
  * a given predicate and maintain the binary search tree properties.
161
- * @param {BTNRep<K, V, RedBlackTreeNode<K, V>>} keyNodeOrEntry - The `keyNodeOrEntry`
161
+ * @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The `keyNodeOrEntry`
162
162
  * parameter in the `override delete` method is used to specify the condition or key based on which a
163
163
  * node should be deleted from the binary tree. It can be a key, a node, an entry, or a predicate
164
164
  * function that determines which node(s) should be deleted.
@@ -166,7 +166,7 @@ export declare class RedBlackTree<K = any, V = any, R = object, MK = any, MV = a
166
166
  * objects. Each object in the array contains information about the deleted node and whether
167
167
  * balancing is needed.
168
168
  */
169
- delete(keyNodeOrEntry: BTNRep<K, V, RedBlackTreeNode<K, V>>): BinaryTreeDeleteResult<RedBlackTreeNode<K, V>>[];
169
+ delete(keyNodeOrEntry: K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined): BinaryTreeDeleteResult<RedBlackTreeNode<K, V>>[];
170
170
  /**
171
171
  * Time Complexity: O(n)
172
172
  * Space Complexity: O(n)
@@ -1,5 +1,6 @@
1
1
  import { BST, BSTNode } from './bst';
2
2
  export class RedBlackTreeNode extends BSTNode {
3
+ parent = undefined;
3
4
  /**
4
5
  * The constructor initializes a node with a key, value, and color for a Red-Black Tree.
5
6
  * @param {K} key - The `key` parameter is a key of type `K` that is used to identify the node in a
@@ -14,7 +15,6 @@ export class RedBlackTreeNode extends BSTNode {
14
15
  super(key, value);
15
16
  this._color = color;
16
17
  }
17
- parent = undefined;
18
18
  _left = undefined;
19
19
  get left() {
20
20
  return this._left;
@@ -94,7 +94,7 @@ export class RedBlackTree extends BST {
94
94
  * This TypeScript constructor initializes a Red-Black Tree with optional keys, nodes, entries, or
95
95
  * raw data.
96
96
  * @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter in the constructor is an
97
- * iterable that can contain either `BTNRep<K, V, RedBlackTreeNode<K, V>>` objects or `R` objects. It
97
+ * iterable that can contain either `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined` objects or `R` objects. It
98
98
  * is used to initialize the Red-Black Tree with keys, nodes, entries, or
99
99
  * @param [options] - The `options` parameter in the constructor is of type `RedBlackTreeOptions<K,
100
100
  * V, R>`. It is an optional parameter that allows you to specify additional options for the
@@ -155,8 +155,8 @@ export class RedBlackTree extends BST {
155
155
  * Space Complexity: O(1)
156
156
  *
157
157
  * The function checks if the input is an instance of the RedBlackTreeNode class.
158
- * @param {BTNRep<K, V, RedBlackTreeNode<K, V>>} keyNodeOrEntry - The parameter
159
- * `keyNodeOrEntry` can be of type `R` or `BTNRep<K, V, RedBlackTreeNode<K, V>>`.
158
+ * @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The parameter
159
+ * `keyNodeOrEntry` can be of type `R` or `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined`.
160
160
  * @returns a boolean value indicating whether the input parameter `keyNodeOrEntry` is
161
161
  * an instance of the `RedBlackTreeNode` class.
162
162
  */
@@ -180,8 +180,8 @@ export class RedBlackTree extends BST {
180
180
  *
181
181
  * The function adds a new node to a binary search tree and returns true if the node was successfully
182
182
  * added.
183
- * @param {BTNRep<K, V, RedBlackTreeNode<K, V>>} keyNodeOrEntry - The parameter
184
- * `keyNodeOrEntry` can accept a value of type `R` or `BTNRep<K, V, RedBlackTreeNode<K, V>>`.
183
+ * @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The parameter
184
+ * `keyNodeOrEntry` can accept a value of type `R` or `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined`.
185
185
  * @param {V} [value] - The `value` parameter is an optional value that you want to associate with
186
186
  * the key in the data structure. It represents the value that you want to add or update in the data
187
187
  * structure.
@@ -220,7 +220,7 @@ export class RedBlackTree extends BST {
220
220
  *
221
221
  * The function overrides the delete method in a binary tree data structure to remove a node based on
222
222
  * a given predicate and maintain the binary search tree properties.
223
- * @param {BTNRep<K, V, RedBlackTreeNode<K, V>>} keyNodeOrEntry - The `keyNodeOrEntry`
223
+ * @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The `keyNodeOrEntry`
224
224
  * parameter in the `override delete` method is used to specify the condition or key based on which a
225
225
  * node should be deleted from the binary tree. It can be a key, a node, an entry, or a predicate
226
226
  * function that determines which node(s) should be deleted.