heap-typed 1.51.5 → 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 (43) hide show
  1. package/README.md +72 -80
  2. package/dist/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
  3. package/dist/data-structures/binary-tree/avl-tree-multi-map.js +2 -10
  4. package/dist/data-structures/binary-tree/avl-tree.d.ts +3 -3
  5. package/dist/data-structures/binary-tree/avl-tree.js +12 -14
  6. package/dist/data-structures/binary-tree/binary-tree.d.ts +7 -13
  7. package/dist/data-structures/binary-tree/binary-tree.js +46 -78
  8. package/dist/data-structures/binary-tree/bst.d.ts +51 -96
  9. package/dist/data-structures/binary-tree/bst.js +120 -218
  10. package/dist/data-structures/binary-tree/rb-tree.d.ts +3 -4
  11. package/dist/data-structures/binary-tree/rb-tree.js +4 -2
  12. package/dist/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
  13. package/dist/data-structures/binary-tree/tree-multi-map.js +1 -0
  14. package/dist/data-structures/heap/heap.d.ts +1 -3
  15. package/dist/interfaces/binary-tree.d.ts +3 -3
  16. package/dist/types/common.d.ts +1 -1
  17. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
  18. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
  19. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
  20. package/dist/types/data-structures/binary-tree/bst.d.ts +6 -5
  21. package/dist/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  22. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
  23. package/dist/types/utils/utils.d.ts +10 -1
  24. package/dist/utils/utils.d.ts +2 -1
  25. package/dist/utils/utils.js +29 -1
  26. package/package.json +2 -2
  27. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +5 -12
  28. package/src/data-structures/binary-tree/avl-tree.ts +15 -15
  29. package/src/data-structures/binary-tree/binary-tree.ts +56 -76
  30. package/src/data-structures/binary-tree/bst.ts +132 -224
  31. package/src/data-structures/binary-tree/rb-tree.ts +9 -6
  32. package/src/data-structures/binary-tree/tree-multi-map.ts +5 -3
  33. package/src/data-structures/heap/heap.ts +1 -1
  34. package/src/interfaces/binary-tree.ts +4 -3
  35. package/src/types/common.ts +1 -1
  36. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +3 -2
  37. package/src/types/data-structures/binary-tree/avl-tree.ts +3 -2
  38. package/src/types/data-structures/binary-tree/binary-tree.ts +5 -5
  39. package/src/types/data-structures/binary-tree/bst.ts +6 -5
  40. package/src/types/data-structures/binary-tree/rb-tree.ts +4 -3
  41. package/src/types/data-structures/binary-tree/tree-multi-map.ts +3 -2
  42. package/src/types/utils/utils.ts +14 -1
  43. package/src/utils/utils.ts +20 -1
@@ -106,27 +106,17 @@ class BinaryTree extends base_1.IterableEntryBase {
106
106
  constructor(keysOrNodesOrEntries = [], options) {
107
107
  super();
108
108
  this.iterationType = 'ITERATIVE';
109
- this._extractor = (key) => (typeof key === 'number' ? key : Number(key));
110
109
  this._NIL = new BinaryTreeNode(NaN);
111
110
  this._DEFAULT_CALLBACK = (node) => (node ? node.key : undefined);
112
111
  if (options) {
113
- const { iterationType, extractor } = options;
112
+ const { iterationType } = options;
114
113
  if (iterationType)
115
114
  this.iterationType = iterationType;
116
- if (extractor)
117
- this._extractor = extractor;
118
115
  }
119
116
  this._size = 0;
120
117
  if (keysOrNodesOrEntries)
121
118
  this.addMany(keysOrNodesOrEntries);
122
119
  }
123
- /**
124
- * The function returns the value of the `_extractor` property.
125
- * @returns The `_extractor` property is being returned.
126
- */
127
- get extractor() {
128
- return this._extractor;
129
- }
130
120
  /**
131
121
  * The function returns the root node, which can be of type NODE, null, or undefined.
132
122
  * @returns The method is returning the value of the `_root` property, which can be of type `NODE`,
@@ -225,23 +215,24 @@ class BinaryTree extends base_1.IterableEntryBase {
225
215
  * itself if it is not a valid node key.
226
216
  */
227
217
  ensureNode(keyOrNodeOrEntry, iterationType = 'ITERATIVE') {
218
+ if (keyOrNodeOrEntry === this.NIL)
219
+ return;
228
220
  if (this.isRealNode(keyOrNodeOrEntry)) {
229
221
  return keyOrNodeOrEntry;
230
222
  }
231
- else if (this.isEntry(keyOrNodeOrEntry)) {
232
- if (keyOrNodeOrEntry[0] === null)
233
- return null;
234
- if (keyOrNodeOrEntry[0] === undefined)
235
- return;
236
- return this.getNodeByKey(keyOrNodeOrEntry[0], iterationType);
237
- }
238
- else {
239
- if (keyOrNodeOrEntry === null)
223
+ if (this.isEntry(keyOrNodeOrEntry)) {
224
+ const key = keyOrNodeOrEntry[0];
225
+ if (key === null)
240
226
  return null;
241
- if (keyOrNodeOrEntry === undefined)
227
+ if (key === undefined)
242
228
  return;
243
- return this.getNodeByKey(keyOrNodeOrEntry, iterationType);
229
+ return this.getNodeByKey(key, iterationType);
244
230
  }
231
+ if (keyOrNodeOrEntry === null)
232
+ return null;
233
+ if (keyOrNodeOrEntry === undefined)
234
+ return;
235
+ return this.getNodeByKey(keyOrNodeOrEntry, iterationType);
245
236
  }
246
237
  /**
247
238
  * The function checks if a given node is a real node or null.
@@ -426,8 +417,7 @@ class BinaryTree extends base_1.IterableEntryBase {
426
417
  const deletedResult = [];
427
418
  if (!this.root)
428
419
  return deletedResult;
429
- if ((!callback || callback === this._DEFAULT_CALLBACK) && identifier instanceof BinaryTreeNode)
430
- callback = (node => node);
420
+ callback = this._ensureCallback(identifier, callback);
431
421
  const curr = this.getNode(identifier, callback);
432
422
  if (!curr)
433
423
  return deletedResult;
@@ -499,11 +489,10 @@ class BinaryTree extends base_1.IterableEntryBase {
499
489
  * @returns an array of nodes of type `NODE`.
500
490
  */
501
491
  getNodes(identifier, callback = this._DEFAULT_CALLBACK, onlyOne = false, beginRoot = this.root, iterationType = this.iterationType) {
502
- if ((!callback || callback === this._DEFAULT_CALLBACK) && identifier instanceof BinaryTreeNode)
503
- callback = (node => node);
504
492
  beginRoot = this.ensureNode(beginRoot);
505
493
  if (!beginRoot)
506
494
  return [];
495
+ callback = this._ensureCallback(identifier, callback);
507
496
  const ans = [];
508
497
  if (iterationType === 'RECURSIVE') {
509
498
  const dfs = (cur) => {
@@ -584,33 +573,7 @@ class BinaryTree extends base_1.IterableEntryBase {
584
573
  * found in the binary tree. If no node is found, it returns `undefined`.
585
574
  */
586
575
  getNodeByKey(key, iterationType = 'ITERATIVE') {
587
- if (!this.root)
588
- return undefined;
589
- if (iterationType === 'RECURSIVE') {
590
- const dfs = (cur) => {
591
- if (cur.key === key)
592
- return cur;
593
- if (!cur.left && !cur.right)
594
- return;
595
- if (cur.left)
596
- return dfs(cur.left);
597
- if (cur.right)
598
- return dfs(cur.right);
599
- };
600
- return dfs(this.root);
601
- }
602
- else {
603
- const stack = [this.root];
604
- while (stack.length > 0) {
605
- const cur = stack.pop();
606
- if (cur) {
607
- if (cur.key === key)
608
- return cur;
609
- cur.left && stack.push(cur.left);
610
- cur.right && stack.push(cur.right);
611
- }
612
- }
613
- }
576
+ return this.getNode(key, this._DEFAULT_CALLBACK, this.root, iterationType);
614
577
  }
615
578
  /**
616
579
  * Time Complexity: O(n)
@@ -639,8 +602,8 @@ class BinaryTree extends base_1.IterableEntryBase {
639
602
  * found, `undefined` is returned.
640
603
  */
641
604
  get(identifier, callback = this._DEFAULT_CALLBACK, beginRoot = this.root, iterationType = this.iterationType) {
642
- var _a, _b;
643
- return (_b = (_a = this.getNode(identifier, callback, beginRoot, iterationType)) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : undefined;
605
+ var _a;
606
+ return (_a = this.getNode(identifier, callback, beginRoot, iterationType)) === null || _a === void 0 ? void 0 : _a.value;
644
607
  }
645
608
  /**
646
609
  * Time Complexity: O(n)
@@ -668,8 +631,7 @@ class BinaryTree extends base_1.IterableEntryBase {
668
631
  * @returns a boolean value.
669
632
  */
670
633
  has(identifier, callback = this._DEFAULT_CALLBACK, beginRoot = this.root, iterationType = this.iterationType) {
671
- if ((!callback || callback === this._DEFAULT_CALLBACK) && identifier instanceof BinaryTreeNode)
672
- callback = (node => node);
634
+ callback = this._ensureCallback(identifier, callback);
673
635
  return this.getNodes(identifier, callback, true, beginRoot, iterationType).length > 0;
674
636
  }
675
637
  /**
@@ -743,7 +705,7 @@ class BinaryTree extends base_1.IterableEntryBase {
743
705
  const dfs = (cur, min, max) => {
744
706
  if (!this.isRealNode(cur))
745
707
  return true;
746
- const numKey = this.extractor(cur.key);
708
+ const numKey = Number(cur.key);
747
709
  if (numKey <= min || numKey >= max)
748
710
  return false;
749
711
  return dfs(cur.left, min, numKey) && dfs(cur.right, numKey, max);
@@ -764,7 +726,7 @@ class BinaryTree extends base_1.IterableEntryBase {
764
726
  curr = curr.left;
765
727
  }
766
728
  curr = stack.pop();
767
- const numKey = this.extractor(curr.key);
729
+ const numKey = Number(curr.key);
768
730
  if (!this.isRealNode(curr) || (!checkMax && prev >= numKey) || (checkMax && prev <= numKey))
769
731
  return false;
770
732
  prev = numKey;
@@ -794,15 +756,15 @@ class BinaryTree extends base_1.IterableEntryBase {
794
756
  * @returns the depth of the `dist` relative to the `beginRoot`.
795
757
  */
796
758
  getDepth(dist, beginRoot = this.root) {
797
- dist = this.ensureNode(dist);
798
- beginRoot = this.ensureNode(beginRoot);
759
+ let distEnsured = this.ensureNode(dist);
760
+ const beginRootEnsured = this.ensureNode(beginRoot);
799
761
  let depth = 0;
800
- while (dist === null || dist === void 0 ? void 0 : dist.parent) {
801
- if (dist === beginRoot) {
762
+ while (distEnsured === null || distEnsured === void 0 ? void 0 : distEnsured.parent) {
763
+ if (distEnsured === beginRootEnsured) {
802
764
  return depth;
803
765
  }
804
766
  depth++;
805
- dist = dist.parent;
767
+ distEnsured = distEnsured.parent;
806
768
  }
807
769
  return depth;
808
770
  }
@@ -936,16 +898,16 @@ class BinaryTree extends base_1.IterableEntryBase {
936
898
  getPathToRoot(beginNode, isReverse = true) {
937
899
  // TODO to support get path through passing key
938
900
  const result = [];
939
- beginNode = this.ensureNode(beginNode);
940
- if (!beginNode)
901
+ let beginNodeEnsured = this.ensureNode(beginNode);
902
+ if (!beginNodeEnsured)
941
903
  return result;
942
- while (beginNode.parent) {
904
+ while (beginNodeEnsured.parent) {
943
905
  // Array.push + Array.reverse is more efficient than Array.unshift
944
906
  // TODO may consider using Deque, so far this is not the performance bottleneck
945
- result.push(beginNode);
946
- beginNode = beginNode.parent;
907
+ result.push(beginNodeEnsured);
908
+ beginNodeEnsured = beginNodeEnsured.parent;
947
909
  }
948
- result.push(beginNode);
910
+ result.push(beginNodeEnsured);
949
911
  return isReverse ? result.reverse() : result;
950
912
  }
951
913
  /**
@@ -1591,10 +1553,10 @@ class BinaryTree extends base_1.IterableEntryBase {
1591
1553
  console.log(`U for undefined
1592
1554
  `);
1593
1555
  if (opts.isShowNull)
1594
- console.log(`NODE for null
1556
+ console.log(`N for null
1595
1557
  `);
1596
1558
  if (opts.isShowRedBlackNIL)
1597
- console.log(`S for Sentinel Node
1559
+ console.log(`S for Sentinel Node(NIL)
1598
1560
  `);
1599
1561
  const display = (root) => {
1600
1562
  const [lines, , ,] = this._displayAux(root, opts);
@@ -1620,23 +1582,23 @@ class BinaryTree extends base_1.IterableEntryBase {
1620
1582
  const stack = [];
1621
1583
  let current = node;
1622
1584
  while (current || stack.length > 0) {
1623
- while (current && !isNaN(this.extractor(current.key))) {
1585
+ while (this.isRealNode(current)) {
1624
1586
  stack.push(current);
1625
1587
  current = current.left;
1626
1588
  }
1627
1589
  current = stack.pop();
1628
- if (current && !isNaN(this.extractor(current.key))) {
1590
+ if (this.isRealNode(current)) {
1629
1591
  yield [current.key, current.value];
1630
1592
  current = current.right;
1631
1593
  }
1632
1594
  }
1633
1595
  }
1634
1596
  else {
1635
- if (node.left && !isNaN(this.extractor(node.key))) {
1597
+ if (node.left && this.isRealNode(node)) {
1636
1598
  yield* this[Symbol.iterator](node.left);
1637
1599
  }
1638
1600
  yield [node.key, node.value];
1639
- if (node.right && !isNaN(this.extractor(node.key))) {
1601
+ if (node.right && this.isRealNode(node)) {
1640
1602
  yield* this[Symbol.iterator](node.right);
1641
1603
  }
1642
1604
  }
@@ -1665,12 +1627,12 @@ class BinaryTree extends base_1.IterableEntryBase {
1665
1627
  else if (node === undefined && !isShowUndefined) {
1666
1628
  return emptyDisplayLayout;
1667
1629
  }
1668
- else if (node !== null && node !== undefined && isNaN(this.extractor(node.key)) && !isShowRedBlackNIL) {
1630
+ else if (this.isNIL(node) && !isShowRedBlackNIL) {
1669
1631
  return emptyDisplayLayout;
1670
1632
  }
1671
1633
  else if (node !== null && node !== undefined) {
1672
1634
  // Display logic of normal nodes
1673
- const key = node.key, line = isNaN(this.extractor(key)) ? 'S' : this.extractor(key).toString(), width = line.length;
1635
+ const key = node.key, line = this.isNIL(node) ? 'S' : key.toString(), width = line.length;
1674
1636
  return _buildNodeDisplay(line, width, this._displayAux(node.left, options), this._displayAux(node.right, options));
1675
1637
  }
1676
1638
  else {
@@ -1766,5 +1728,11 @@ class BinaryTree extends base_1.IterableEntryBase {
1766
1728
  }
1767
1729
  this._root = v;
1768
1730
  }
1731
+ _ensureCallback(identifier, callback = this._DEFAULT_CALLBACK) {
1732
+ if ((!callback || callback === this._DEFAULT_CALLBACK) && this.isNode(identifier)) {
1733
+ callback = (node => node);
1734
+ }
1735
+ return callback;
1736
+ }
1769
1737
  }
1770
1738
  exports.BinaryTree = BinaryTree;
@@ -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,42 +142,26 @@ 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
- * Time Complexity: O(log n)
166
- * Space Complexity: O(1)
167
- */
168
- /**
169
- * Time Complexity: O(log n)
170
- * Space Complexity: O(1)
171
- *
172
- * The function `getNodeByKey` searches for a node in a binary tree based on a given key, using
173
- * either recursive or iterative methods.
174
- * @param {K} key - The `key` parameter is the key value that we are searching for in the tree.
175
- * It is used to identify the node that we want to retrieve.
176
- * @param iterationType - The `iterationType` parameter is an optional parameter that specifies the
177
- * type of iteration to use when searching for a node in the binary tree. It can have two possible
178
- * values:
179
- * @returns The function `getNodeByKey` returns a node (`NODE`) if a node with the specified key is
180
- * found in the binary tree. If no node is found, it returns `undefined`.
181
- */
182
- getNodeByKey(key: K, iterationType?: IterationType): NODE | undefined;
183
165
  /**
184
166
  * Time Complexity: O(log n)
185
167
  * Space Complexity: O(k + log n)
@@ -235,6 +217,25 @@ export declare class BST<K = any, V = any, NODE extends BSTNode<K, V, NODE> = BS
235
217
  * @returns The method is returning a value of type `NODE | null | undefined`.
236
218
  */
237
219
  getNode<C extends BTNCallback<NODE>>(identifier: ReturnType<C> | undefined, callback?: C, beginRoot?: BSTNKeyOrNode<K, NODE>, iterationType?: IterationType): NODE | undefined;
220
+ /**
221
+ * Time Complexity: O(log n)
222
+ * Space Complexity: O(1)
223
+ */
224
+ /**
225
+ * Time Complexity: O(log n)
226
+ * Space Complexity: O(1)
227
+ *
228
+ * The function `getNodeByKey` searches for a node in a binary tree based on a given key, using
229
+ * either recursive or iterative methods.
230
+ * @param {K} key - The `key` parameter is the key value that we are searching for in the tree.
231
+ * It is used to identify the node that we want to retrieve.
232
+ * @param iterationType - The `iterationType` parameter is an optional parameter that specifies the
233
+ * type of iteration to use when searching for a node in the binary tree. It can have two possible
234
+ * values:
235
+ * @returns The function `getNodeByKey` returns a node (`NODE`) if a node with the specified key is
236
+ * found in the binary tree. If no node is found, it returns `undefined`.
237
+ */
238
+ getNodeByKey(key: K, iterationType?: IterationType): NODE | undefined;
238
239
  /**
239
240
  * Time complexity: O(n)
240
241
  * Space complexity: O(n)
@@ -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
  }