data-structure-typed 1.51.7 → 1.51.8

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 (89) 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 +156 -156
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +1 -10
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.js +12 -12
  10. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +5 -12
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.js +22 -32
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/bst.d.ts +32 -77
  15. package/dist/cjs/data-structures/binary-tree/bst.js +68 -136
  16. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +3 -13
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.js +3 -20
  19. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
  21. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  22. package/dist/cjs/data-structures/heap/heap.d.ts +1 -3
  23. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  24. package/dist/cjs/interfaces/binary-tree.d.ts +3 -3
  25. package/dist/cjs/types/common.d.ts +1 -1
  26. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
  27. package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
  28. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
  29. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +6 -5
  30. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  31. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
  32. package/dist/cjs/types/utils/utils.d.ts +10 -1
  33. package/dist/cjs/utils/utils.d.ts +2 -1
  34. package/dist/cjs/utils/utils.js +29 -1
  35. package/dist/cjs/utils/utils.js.map +1 -1
  36. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
  37. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +1 -10
  38. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
  39. package/dist/mjs/data-structures/binary-tree/avl-tree.js +12 -12
  40. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +5 -12
  41. package/dist/mjs/data-structures/binary-tree/binary-tree.js +22 -32
  42. package/dist/mjs/data-structures/binary-tree/bst.d.ts +32 -77
  43. package/dist/mjs/data-structures/binary-tree/bst.js +70 -139
  44. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +3 -13
  45. package/dist/mjs/data-structures/binary-tree/rb-tree.js +3 -20
  46. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
  47. package/dist/mjs/data-structures/heap/heap.d.ts +1 -3
  48. package/dist/mjs/interfaces/binary-tree.d.ts +3 -3
  49. package/dist/mjs/types/common.d.ts +1 -1
  50. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
  51. package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
  52. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
  53. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +6 -5
  54. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  55. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
  56. package/dist/mjs/types/utils/utils.d.ts +10 -1
  57. package/dist/mjs/utils/utils.d.ts +2 -1
  58. package/dist/mjs/utils/utils.js +27 -0
  59. package/dist/umd/data-structure-typed.js +133 -208
  60. package/dist/umd/data-structure-typed.min.js +4 -4
  61. package/dist/umd/data-structure-typed.min.js.map +1 -1
  62. package/package.json +6 -6
  63. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +4 -12
  64. package/src/data-structures/binary-tree/avl-tree.ts +15 -14
  65. package/src/data-structures/binary-tree/binary-tree.ts +29 -38
  66. package/src/data-structures/binary-tree/bst.ts +78 -148
  67. package/src/data-structures/binary-tree/rb-tree.ts +8 -22
  68. package/src/data-structures/binary-tree/tree-multi-map.ts +4 -3
  69. package/src/data-structures/heap/heap.ts +1 -1
  70. package/src/interfaces/binary-tree.ts +4 -3
  71. package/src/types/common.ts +1 -1
  72. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +3 -2
  73. package/src/types/data-structures/binary-tree/avl-tree.ts +3 -2
  74. package/src/types/data-structures/binary-tree/binary-tree.ts +5 -5
  75. package/src/types/data-structures/binary-tree/bst.ts +6 -5
  76. package/src/types/data-structures/binary-tree/rb-tree.ts +4 -3
  77. package/src/types/data-structures/binary-tree/tree-multi-map.ts +3 -2
  78. package/src/types/utils/utils.ts +14 -1
  79. package/src/utils/utils.ts +20 -1
  80. package/test/integration/all-in-one.test.ts +2 -2
  81. package/test/integration/index.html +70 -0
  82. package/test/performance/reportor.ts +2 -3
  83. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +7 -7
  84. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
  85. package/test/unit/data-structures/binary-tree/bst.test.ts +6 -6
  86. package/test/unit/data-structures/binary-tree/overall.test.ts +24 -20
  87. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +6 -6
  88. package/test/unit/utils/utils.test.ts +5 -0
  89. package/test/utils/console.ts +1 -1
@@ -6,9 +6,9 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import { BST, BSTNode } from './bst';
9
- import type { AVLTreeNested, AVLTreeNodeNested, AVLTreeOptions, BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, KeyOrNodeOrEntry } from '../../types';
9
+ import type { AVLTreeNested, AVLTreeNodeNested, AVLTreeOptions, BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, Comparable, KeyOrNodeOrEntry } from '../../types';
10
10
  import { IBinaryTree } from '../../interfaces';
11
- export declare class AVLTreeNode<K = any, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNodeNested<K, V>> extends BSTNode<K, V, NODE> {
11
+ export declare class AVLTreeNode<K extends Comparable, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNodeNested<K, V>> extends BSTNode<K, V, NODE> {
12
12
  /**
13
13
  * The constructor function initializes a new instance of a class with a key and an optional value,
14
14
  * and sets the height property to 0.
@@ -40,7 +40,7 @@ export declare class AVLTreeNode<K = any, V = any, NODE extends AVLTreeNode<K, V
40
40
  * 6. Complex Insertions and Deletions: Due to rebalancing, these operations are more complex than in a regular BST.
41
41
  * 7. Path Length: The path length from the root to any leaf is longer compared to an unbalanced BST, but shorter than a linear chain of nodes.
42
42
  */
43
- export declare class AVLTree<K = any, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNode<K, V, AVLTreeNodeNested<K, V>>, TREE extends AVLTree<K, V, NODE, TREE> = AVLTree<K, V, NODE, AVLTreeNested<K, V, NODE>>> extends BST<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
43
+ export declare class AVLTree<K extends Comparable, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNode<K, V, AVLTreeNodeNested<K, V>>, TREE extends AVLTree<K, V, NODE, TREE> = AVLTree<K, V, NODE, AVLTreeNested<K, V, NODE>>> extends BST<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
44
44
  /**
45
45
  * The constructor function initializes an AVLTree object with optional keysOrNodesOrEntries and options.
46
46
  * @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, NODE>`
@@ -82,7 +82,7 @@ export class AVLTree extends BST {
82
82
  createTree(options) {
83
83
  return new AVLTree([], {
84
84
  iterationType: this.iterationType,
85
- variant: this.variant,
85
+ comparator: this.comparator,
86
86
  ...options
87
87
  });
88
88
  }
@@ -158,21 +158,21 @@ export class AVLTree extends BST {
158
158
  * if either `srcNode` or `destNode` is undefined.
159
159
  */
160
160
  _swapProperties(srcNode, destNode) {
161
- srcNode = this.ensureNode(srcNode);
162
- destNode = this.ensureNode(destNode);
163
- if (srcNode && destNode) {
164
- const { key, value, height } = destNode;
161
+ const srcNodeEnsured = this.ensureNode(srcNode);
162
+ const destNodeEnsured = this.ensureNode(destNode);
163
+ if (srcNodeEnsured && destNodeEnsured) {
164
+ const { key, value, height } = destNodeEnsured;
165
165
  const tempNode = this.createNode(key, value);
166
166
  if (tempNode) {
167
167
  tempNode.height = height;
168
- destNode.key = srcNode.key;
169
- destNode.value = srcNode.value;
170
- destNode.height = srcNode.height;
171
- srcNode.key = tempNode.key;
172
- srcNode.value = tempNode.value;
173
- srcNode.height = tempNode.height;
168
+ destNodeEnsured.key = srcNodeEnsured.key;
169
+ destNodeEnsured.value = srcNodeEnsured.value;
170
+ destNodeEnsured.height = srcNodeEnsured.height;
171
+ srcNodeEnsured.key = tempNode.key;
172
+ srcNodeEnsured.value = tempNode.value;
173
+ srcNodeEnsured.height = tempNode.height;
174
174
  }
175
- return destNode;
175
+ return destNodeEnsured;
176
176
  }
177
177
  return undefined;
178
178
  }
@@ -5,8 +5,7 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { BinaryTreeDeleteResult, BinaryTreeNested, BinaryTreeNodeNested, BinaryTreeOptions, BinaryTreePrintOptions, BTNCallback, BTNEntry, DFSOrderPattern, EntryCallback, KeyOrNodeOrEntry, NodeDisplayLayout } from '../../types';
9
- import { FamilyPosition, IterationType } from '../../types';
8
+ import type { BinaryTreeDeleteResult, BinaryTreeNested, BinaryTreeNodeNested, BinaryTreeOptions, BinaryTreePrintOptions, BTNCallback, BTNEntry, Comparable, DFSOrderPattern, EntryCallback, FamilyPosition, IterationType, KeyOrNodeOrEntry, NodeDisplayLayout } from '../../types';
10
9
  import { IBinaryTree } from '../../interfaces';
11
10
  import { IterableEntryBase } from '../base';
12
11
  /**
@@ -14,7 +13,7 @@ import { IterableEntryBase } from '../base';
14
13
  * @template V - The type of data stored in the node.
15
14
  * @template NODE - The type of the family relationship in the binary tree.
16
15
  */
17
- export declare class BinaryTreeNode<K = any, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>> {
16
+ export declare class BinaryTreeNode<K extends Comparable, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>> {
18
17
  key: K;
19
18
  value?: V;
20
19
  parent?: NODE;
@@ -66,7 +65,7 @@ export declare class BinaryTreeNode<K = any, V = any, NODE extends BinaryTreeNod
66
65
  * 4. Subtrees: Each child of a node forms the root of a subtree.
67
66
  * 5. Leaf Nodes: Nodes without children are leaves.
68
67
  */
69
- export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>, TREE extends BinaryTree<K, V, NODE, TREE> = BinaryTree<K, V, NODE, BinaryTreeNested<K, V, NODE>>> extends IterableEntryBase<K, V | undefined> implements IBinaryTree<K, V, NODE, TREE> {
68
+ export declare class BinaryTree<K extends Comparable, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>, TREE extends BinaryTree<K, V, NODE, TREE> = BinaryTree<K, V, NODE, BinaryTreeNested<K, V, NODE>>> extends IterableEntryBase<K, V | undefined> implements IBinaryTree<K, V, NODE, TREE> {
70
69
  iterationType: IterationType;
71
70
  /**
72
71
  * The constructor function initializes a binary tree object with optional keysOrNodesOrEntries and options.
@@ -77,13 +76,7 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
77
76
  * `Partial<BinaryTreeOptions>`, which means that not all properties of `BinaryTreeOptions` are
78
77
  * required.
79
78
  */
80
- constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, options?: BinaryTreeOptions<K>);
81
- protected _extractor: (key: K) => number;
82
- /**
83
- * The function returns the value of the `_extractor` property.
84
- * @returns The `_extractor` property is being returned.
85
- */
86
- get extractor(): (key: K) => number;
79
+ constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, options?: BinaryTreeOptions);
87
80
  protected _root?: NODE | null;
88
81
  /**
89
82
  * The function returns the root node, which can be of type NODE, null, or undefined.
@@ -117,7 +110,7 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
117
110
  * you can provide only a subset of the properties defined in the `BinaryTreeOptions` interface.
118
111
  * @returns a new instance of a binary tree.
119
112
  */
120
- createTree(options?: Partial<BinaryTreeOptions<K>>): TREE;
113
+ createTree(options?: Partial<BinaryTreeOptions>): TREE;
121
114
  /**
122
115
  * The function `keyValueOrEntryToNode` converts an keyOrNodeOrEntry object into a node object.
123
116
  * @param keyOrNodeOrEntry - The `keyOrNodeOrEntry` parameter is of type `KeyOrNodeOrEntry<K, V, NODE>`.
@@ -108,24 +108,14 @@ export class BinaryTree extends IterableEntryBase {
108
108
  constructor(keysOrNodesOrEntries = [], options) {
109
109
  super();
110
110
  if (options) {
111
- const { iterationType, extractor } = options;
111
+ const { iterationType } = options;
112
112
  if (iterationType)
113
113
  this.iterationType = iterationType;
114
- if (extractor)
115
- this._extractor = extractor;
116
114
  }
117
115
  this._size = 0;
118
116
  if (keysOrNodesOrEntries)
119
117
  this.addMany(keysOrNodesOrEntries);
120
118
  }
121
- _extractor = (key) => (typeof key === 'number' ? key : Number(key));
122
- /**
123
- * The function returns the value of the `_extractor` property.
124
- * @returns The `_extractor` property is being returned.
125
- */
126
- get extractor() {
127
- return this._extractor;
128
- }
129
119
  _root;
130
120
  /**
131
121
  * The function returns the root node, which can be of type NODE, null, or undefined.
@@ -715,7 +705,7 @@ export class BinaryTree extends IterableEntryBase {
715
705
  const dfs = (cur, min, max) => {
716
706
  if (!this.isRealNode(cur))
717
707
  return true;
718
- const numKey = this.extractor(cur.key);
708
+ const numKey = Number(cur.key);
719
709
  if (numKey <= min || numKey >= max)
720
710
  return false;
721
711
  return dfs(cur.left, min, numKey) && dfs(cur.right, numKey, max);
@@ -736,7 +726,7 @@ export class BinaryTree extends IterableEntryBase {
736
726
  curr = curr.left;
737
727
  }
738
728
  curr = stack.pop();
739
- const numKey = this.extractor(curr.key);
729
+ const numKey = Number(curr.key);
740
730
  if (!this.isRealNode(curr) || (!checkMax && prev >= numKey) || (checkMax && prev <= numKey))
741
731
  return false;
742
732
  prev = numKey;
@@ -766,15 +756,15 @@ export class BinaryTree extends IterableEntryBase {
766
756
  * @returns the depth of the `dist` relative to the `beginRoot`.
767
757
  */
768
758
  getDepth(dist, beginRoot = this.root) {
769
- dist = this.ensureNode(dist);
770
- beginRoot = this.ensureNode(beginRoot);
759
+ let distEnsured = this.ensureNode(dist);
760
+ const beginRootEnsured = this.ensureNode(beginRoot);
771
761
  let depth = 0;
772
- while (dist?.parent) {
773
- if (dist === beginRoot) {
762
+ while (distEnsured?.parent) {
763
+ if (distEnsured === beginRootEnsured) {
774
764
  return depth;
775
765
  }
776
766
  depth++;
777
- dist = dist.parent;
767
+ distEnsured = distEnsured.parent;
778
768
  }
779
769
  return depth;
780
770
  }
@@ -907,16 +897,16 @@ export class BinaryTree extends IterableEntryBase {
907
897
  getPathToRoot(beginNode, isReverse = true) {
908
898
  // TODO to support get path through passing key
909
899
  const result = [];
910
- beginNode = this.ensureNode(beginNode);
911
- if (!beginNode)
900
+ let beginNodeEnsured = this.ensureNode(beginNode);
901
+ if (!beginNodeEnsured)
912
902
  return result;
913
- while (beginNode.parent) {
903
+ while (beginNodeEnsured.parent) {
914
904
  // Array.push + Array.reverse is more efficient than Array.unshift
915
905
  // TODO may consider using Deque, so far this is not the performance bottleneck
916
- result.push(beginNode);
917
- beginNode = beginNode.parent;
906
+ result.push(beginNodeEnsured);
907
+ beginNodeEnsured = beginNodeEnsured.parent;
918
908
  }
919
- result.push(beginNode);
909
+ result.push(beginNodeEnsured);
920
910
  return isReverse ? result.reverse() : result;
921
911
  }
922
912
  /**
@@ -1562,10 +1552,10 @@ export class BinaryTree extends IterableEntryBase {
1562
1552
  console.log(`U for undefined
1563
1553
  `);
1564
1554
  if (opts.isShowNull)
1565
- console.log(`NODE for null
1555
+ console.log(`N for null
1566
1556
  `);
1567
1557
  if (opts.isShowRedBlackNIL)
1568
- console.log(`S for Sentinel Node
1558
+ console.log(`S for Sentinel Node(NIL)
1569
1559
  `);
1570
1560
  const display = (root) => {
1571
1561
  const [lines, , ,] = this._displayAux(root, opts);
@@ -1591,23 +1581,23 @@ export class BinaryTree extends IterableEntryBase {
1591
1581
  const stack = [];
1592
1582
  let current = node;
1593
1583
  while (current || stack.length > 0) {
1594
- while (current && !isNaN(this.extractor(current.key))) {
1584
+ while (this.isRealNode(current)) {
1595
1585
  stack.push(current);
1596
1586
  current = current.left;
1597
1587
  }
1598
1588
  current = stack.pop();
1599
- if (current && !isNaN(this.extractor(current.key))) {
1589
+ if (this.isRealNode(current)) {
1600
1590
  yield [current.key, current.value];
1601
1591
  current = current.right;
1602
1592
  }
1603
1593
  }
1604
1594
  }
1605
1595
  else {
1606
- if (node.left && !isNaN(this.extractor(node.key))) {
1596
+ if (node.left && this.isRealNode(node)) {
1607
1597
  yield* this[Symbol.iterator](node.left);
1608
1598
  }
1609
1599
  yield [node.key, node.value];
1610
- if (node.right && !isNaN(this.extractor(node.key))) {
1600
+ if (node.right && this.isRealNode(node)) {
1611
1601
  yield* this[Symbol.iterator](node.right);
1612
1602
  }
1613
1603
  }
@@ -1636,12 +1626,12 @@ export class BinaryTree extends IterableEntryBase {
1636
1626
  else if (node === undefined && !isShowUndefined) {
1637
1627
  return emptyDisplayLayout;
1638
1628
  }
1639
- else if (node !== null && node !== undefined && isNaN(this.extractor(node.key)) && !isShowRedBlackNIL) {
1629
+ else if (this.isNIL(node) && !isShowRedBlackNIL) {
1640
1630
  return emptyDisplayLayout;
1641
1631
  }
1642
1632
  else if (node !== null && node !== undefined) {
1643
1633
  // Display logic of normal nodes
1644
- const key = node.key, line = isNaN(this.extractor(key)) ? 'S' : this.extractor(key).toString(), width = line.length;
1634
+ const key = node.key, line = this.isNIL(node) ? 'S' : key.toString(), width = line.length;
1645
1635
  return _buildNodeDisplay(line, width, this._displayAux(node.left, options), this._displayAux(node.right, options));
1646
1636
  }
1647
1637
  else {
@@ -5,11 +5,10 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { BSTNested, BSTNodeNested, BSTOptions, BTNCallback, KeyOrNodeOrEntry } from '../../types';
9
- import { BSTNKeyOrNode, BSTVariant, CP, DFSOrderPattern, IterationType } from '../../types';
8
+ import type { BSTNested, BSTNKeyOrNode, BSTNodeNested, BSTOptions, BTNCallback, Comparable, Comparator, CP, DFSOrderPattern, IterationType, KeyOrNodeOrEntry } from '../../types';
10
9
  import { BinaryTree, BinaryTreeNode } from './binary-tree';
11
10
  import { IBinaryTree } from '../../interfaces';
12
- export declare class BSTNode<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BSTNodeNested<K, V>> extends BinaryTreeNode<K, V, NODE> {
11
+ export declare class BSTNode<K extends Comparable, V = any, NODE extends BSTNode<K, V, NODE> = BSTNodeNested<K, V>> extends BinaryTreeNode<K, V, NODE> {
13
12
  parent?: NODE;
14
13
  constructor(key: K, value?: V);
15
14
  protected _left?: NODE;
@@ -47,12 +46,13 @@ export declare class BSTNode<K = any, V = any, NODE extends BSTNode<K, V, NODE>
47
46
  * 6. Balance Variability: Can become unbalanced; special types maintain balance.
48
47
  * 7. No Auto-Balancing: Standard BSTs don't automatically balance themselves.
49
48
  */
50
- export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BSTNode<K, V, BSTNodeNested<K, V>>, TREE extends BST<K, V, NODE, TREE> = BST<K, V, NODE, BSTNested<K, V, NODE>>> extends BinaryTree<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
49
+ export declare class BST<K extends Comparable, V = any, NODE extends BSTNode<K, V, NODE> = BSTNode<K, V, BSTNodeNested<K, V>>, TREE extends BST<K, V, NODE, TREE> = BST<K, V, NODE, BSTNested<K, V, NODE>>> extends BinaryTree<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
51
50
  /**
52
- * This is the constructor function for a TypeScript class that initializes a binary search tree with
53
- * optional keys or nodes or entries and options.
54
- * @param keysOrNodesOrEntries - An iterable object that contains keys, nodes, or entries. It is used
55
- * to initialize the binary search tree with the provided keys, nodes, or entries.
51
+ * This is the constructor function for a Binary Search Tree class in TypeScript, which initializes
52
+ * the tree with keys, nodes, or entries and optional options.
53
+ * @param keysOrNodesOrEntries - The `keysOrNodesOrEntries` parameter is an iterable object that can
54
+ * contain keys, nodes, or entries. It is used to initialize the binary search tree with the provided
55
+ * keys, nodes, or entries.
56
56
  * @param [options] - The `options` parameter is an optional object that can contain additional
57
57
  * configuration options for the binary search tree. It can have the following properties:
58
58
  */
@@ -63,12 +63,12 @@ export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BS
63
63
  * @returns The `_root` property of the object, which is of type `NODE` or `undefined`.
64
64
  */
65
65
  get root(): NODE | undefined;
66
- protected _variant: BSTVariant;
66
+ protected _comparator: Comparator<K>;
67
67
  /**
68
- * The function returns the value of the _variant property.
69
- * @returns The value of the `_variant` property.
68
+ * The function returns the value of the _comparator property.
69
+ * @returns The `_comparator` property is being returned.
70
70
  */
71
- get variant(): BSTVariant;
71
+ get comparator(): Comparator<K>;
72
72
  /**
73
73
  * The function creates a new BSTNode with the given key and value and returns it.
74
74
  * @param {K} key - The key parameter is of type K, which represents the type of the key for the node
@@ -127,13 +127,11 @@ export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BS
127
127
  * Time Complexity: O(log n)
128
128
  * Space Complexity: O(1)
129
129
  *
130
- * The `add` function adds a new node to a binary tree, updating the value if the key already exists
131
- * or inserting a new node if the key is unique.
132
- * @param keyOrNodeOrEntry - The `keyOrNodeOrEntry` parameter can accept three types of values:
133
- * @param {V} [value] - The `value` parameter represents the value associated with the key that is
134
- * being added to the binary tree.
135
- * @returns The method `add` returns either the newly added node (`newNode`) or `undefined` if the
136
- * node was not added.
130
+ * The `add` function in TypeScript adds a new node to a binary search tree based on the key value,
131
+ * updating the value if the key already exists.
132
+ * @param keyOrNodeOrEntry - It is a parameter that can accept three types of values:
133
+ * @param {V} [value] - The value to be added to the binary search tree.
134
+ * @returns The method returns a boolean value.
137
135
  */
138
136
  add(keyOrNodeOrEntry: KeyOrNodeOrEntry<K, V, NODE>, value?: V): boolean;
139
137
  /**
@@ -144,21 +142,24 @@ export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BS
144
142
  * Time Complexity: O(k log n)
145
143
  * Space Complexity: O(k + log n)
146
144
  *
147
- * The `addMany` function in TypeScript adds multiple keys or nodes to a binary tree, optionally
148
- * balancing the tree after each addition.
149
- * @param keysOrNodesOrEntries - An iterable containing the keys, nodes, or entries to be added to
150
- * the binary tree.
145
+ * The `addMany` function in TypeScript adds multiple keys or nodes to a data structure, balancing
146
+ * the structure if specified, and returns an array indicating whether each key or node was
147
+ * successfully inserted.
148
+ * @param keysOrNodesOrEntries - An iterable containing keys, nodes, or entries to be added to the
149
+ * data structure.
151
150
  * @param [values] - An optional iterable of values to be associated with the keys or nodes being
152
151
  * added. If provided, the values will be assigned to the corresponding keys or nodes in the same
153
152
  * order. If not provided, undefined will be assigned as the value for each key or node.
154
- * @param [isBalanceAdd=true] - A boolean flag indicating whether the add operation should be
155
- * balanced or not. If set to true, the add operation will be balanced using a binary search tree
156
- * algorithm. If set to false, the add operation will not be balanced and the nodes will be added
157
- * in the order they appear in the input.
158
- * @param iterationType - The `iterationType` parameter is an optional parameter that specifies the
159
- * type of iteration to use when adding multiple keys or nodes. It has a default value of
160
- * `this.iterationType`, which suggests that it is a property of the current object.
161
- * @returns The function `addMany` returns an array of nodes (`NODE`) or `undefined` values.
153
+ * @param [isBalanceAdd=true] - A boolean flag indicating whether the tree should be balanced after
154
+ * adding the elements. If set to true, the tree will be balanced using a binary search tree
155
+ * algorithm. If set to false, the elements will be added without balancing the tree. The default
156
+ * value is true.
157
+ * @param {IterationType} iterationType - The `iterationType` parameter is an optional parameter that
158
+ * specifies the type of iteration to use when adding multiple keys or nodes to the binary tree. It
159
+ * has a default value of `this.iterationType`, which means it will use the iteration type specified
160
+ * in the binary tree instance.
161
+ * @returns The function `addMany` returns an array of booleans indicating whether each key or node
162
+ * or entry was successfully inserted into the data structure.
162
163
  */
163
164
  addMany(keysOrNodesOrEntries: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, values?: Iterable<V | undefined>, isBalanceAdd?: boolean, iterationType?: IterationType): boolean[];
164
165
  /**
@@ -304,24 +305,6 @@ export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BS
304
305
  * function.
305
306
  */
306
307
  listLevels<C extends BTNCallback<NODE>>(callback?: C, beginRoot?: KeyOrNodeOrEntry<K, V, NODE>, iterationType?: IterationType): ReturnType<C>[][];
307
- /**
308
- * Time Complexity: O(log n)
309
- * Space Complexity: O(1)
310
- */
311
- /**
312
- * Time Complexity: O(log n)
313
- * Space Complexity: O(1)
314
- *
315
- * The `lastKey` function returns the key of the rightmost node in a binary tree, or the key of the
316
- * leftmost node if the comparison result is greater than.
317
- * @param {K | NODE | undefined} beginRoot - The `beginRoot` parameter is optional and can be of
318
- * type `K`, `NODE`, or `undefined`. It represents the starting point for finding the last key in
319
- * the binary tree. If not provided, it defaults to the root of the binary tree (`this.root`).
320
- * @returns the key of the rightmost node in the binary tree if the comparison result is less than,
321
- * the key of the leftmost node if the comparison result is greater than, and the key of the
322
- * rightmost node otherwise. If no node is found, it returns 0.
323
- */
324
- lastKey(beginRoot?: KeyOrNodeOrEntry<K, V, NODE>): K | undefined;
325
308
  /**
326
309
  * Time Complexity: O(log n)
327
310
  * Space Complexity: O(log n)
@@ -393,32 +376,4 @@ export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BS
393
376
  * can either be an object of type `NODE` or it can be `undefined`.
394
377
  */
395
378
  protected _setRoot(v: NODE | undefined): void;
396
- /**
397
- * The function compares two values using a comparator function and returns whether the first value
398
- * is greater than, less than, or equal to the second value.
399
- * @param {K} a - The parameter "a" is of type K.
400
- * @param {K} b - The parameter "b" in the above code represents a K.
401
- * @returns a value of type CP (ComparisonResult). The possible return values are 'GT' (greater
402
- * than), 'LT' (less than), or 'EQ' (equal).
403
- */
404
- protected _compare(a: K, b: K): CP;
405
- /**
406
- * The function `_lt` compares two values `a` and `b` using an extractor function and returns true if
407
- * `a` is less than `b` based on the specified variant.
408
- * @param {K} a - The parameter "a" is of type "K", which means it can be any type. It represents the
409
- * first value to be compared in the function.
410
- * @param {K} b - The parameter `b` is of type `K`, which means it can be any type. It is used as one
411
- * of the arguments for the comparison in the `_lt` function.
412
- * @returns a boolean value.
413
- */
414
- protected _lt(a: K, b: K): boolean;
415
- /**
416
- * The function compares two values using a custom extractor function and returns true if the first
417
- * value is greater than the second value.
418
- * @param {K} a - The parameter "a" is of type K, which means it can be any type.
419
- * @param {K} b - The parameter "b" is of type K, which means it can be any type. It is used as one
420
- * of the arguments for the comparison in the function.
421
- * @returns a boolean value.
422
- */
423
- protected _gt(a: K, b: K): boolean;
424
379
  }