data-structure-typed 1.53.6 → 1.53.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 (161) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +16 -25
  3. package/benchmark/report.html +32 -5
  4. package/benchmark/report.json +326 -23
  5. package/dist/cjs/common/index.d.ts +12 -0
  6. package/dist/cjs/common/index.js +29 -0
  7. package/dist/cjs/common/index.js.map +1 -0
  8. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
  9. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +9 -12
  10. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/avl-tree.js +2 -2
  12. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +55 -20
  14. package/dist/cjs/data-structures/binary-tree/binary-tree.js +102 -68
  15. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  16. package/dist/cjs/data-structures/binary-tree/bst.d.ts +131 -37
  17. package/dist/cjs/data-structures/binary-tree/bst.js +222 -69
  18. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  19. package/dist/cjs/data-structures/binary-tree/index.d.ts +1 -1
  20. package/dist/cjs/data-structures/binary-tree/index.js +1 -1
  21. package/dist/cjs/data-structures/binary-tree/index.js.map +1 -1
  22. package/dist/{mjs/data-structures/binary-tree/rb-tree.d.ts → cjs/data-structures/binary-tree/red-black-tree.d.ts} +56 -0
  23. package/dist/cjs/data-structures/binary-tree/{rb-tree.js → red-black-tree.js} +60 -4
  24. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -0
  25. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
  26. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +7 -7
  27. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  28. package/dist/cjs/data-structures/hash/hash-map.d.ts +30 -0
  29. package/dist/cjs/data-structures/hash/hash-map.js +30 -0
  30. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  31. package/dist/cjs/data-structures/heap/heap.d.ts +26 -9
  32. package/dist/cjs/data-structures/heap/heap.js +37 -17
  33. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  34. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +54 -9
  35. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +80 -19
  36. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  37. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +35 -2
  38. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +55 -11
  39. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  40. package/dist/cjs/data-structures/queue/deque.d.ts +37 -8
  41. package/dist/cjs/data-structures/queue/deque.js +73 -29
  42. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  43. package/dist/cjs/data-structures/queue/queue.d.ts +41 -1
  44. package/dist/cjs/data-structures/queue/queue.js +51 -9
  45. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  46. package/dist/cjs/data-structures/stack/stack.d.ts +27 -10
  47. package/dist/cjs/data-structures/stack/stack.js +39 -20
  48. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  49. package/dist/cjs/data-structures/trie/trie.d.ts +111 -6
  50. package/dist/cjs/data-structures/trie/trie.js +123 -14
  51. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  52. package/dist/cjs/index.d.ts +1 -1
  53. package/dist/cjs/index.js +1 -1
  54. package/dist/cjs/index.js.map +1 -1
  55. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  56. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +3 -2
  57. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -1
  58. package/dist/cjs/types/utils/utils.d.ts +10 -6
  59. package/dist/cjs/utils/utils.js +4 -2
  60. package/dist/cjs/utils/utils.js.map +1 -1
  61. package/dist/mjs/common/index.d.ts +12 -0
  62. package/dist/mjs/common/index.js +29 -0
  63. package/dist/mjs/common/index.js.map +1 -0
  64. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
  65. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +10 -12
  66. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  67. package/dist/mjs/data-structures/binary-tree/avl-tree.js +3 -2
  68. package/dist/mjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  69. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +55 -20
  70. package/dist/mjs/data-structures/binary-tree/binary-tree.js +97 -63
  71. package/dist/mjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  72. package/dist/mjs/data-structures/binary-tree/bst.d.ts +131 -37
  73. package/dist/mjs/data-structures/binary-tree/bst.js +224 -69
  74. package/dist/mjs/data-structures/binary-tree/bst.js.map +1 -1
  75. package/dist/mjs/data-structures/binary-tree/index.d.ts +1 -1
  76. package/dist/mjs/data-structures/binary-tree/index.js +1 -1
  77. package/dist/mjs/data-structures/binary-tree/index.js.map +1 -1
  78. package/dist/{cjs/data-structures/binary-tree/rb-tree.d.ts → mjs/data-structures/binary-tree/red-black-tree.d.ts} +56 -0
  79. package/dist/mjs/data-structures/binary-tree/{rb-tree.js → red-black-tree.js} +60 -4
  80. package/dist/mjs/data-structures/binary-tree/red-black-tree.js.map +1 -0
  81. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
  82. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +5 -5
  83. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  84. package/dist/mjs/data-structures/hash/hash-map.d.ts +30 -0
  85. package/dist/mjs/data-structures/hash/hash-map.js +30 -0
  86. package/dist/mjs/data-structures/hash/hash-map.js.map +1 -1
  87. package/dist/mjs/data-structures/heap/heap.d.ts +26 -9
  88. package/dist/mjs/data-structures/heap/heap.js +37 -17
  89. package/dist/mjs/data-structures/heap/heap.js.map +1 -1
  90. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +54 -9
  91. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +80 -19
  92. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  93. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +35 -2
  94. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +55 -11
  95. package/dist/mjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  96. package/dist/mjs/data-structures/queue/deque.d.ts +37 -8
  97. package/dist/mjs/data-structures/queue/deque.js +73 -29
  98. package/dist/mjs/data-structures/queue/deque.js.map +1 -1
  99. package/dist/mjs/data-structures/queue/queue.d.ts +41 -1
  100. package/dist/mjs/data-structures/queue/queue.js +51 -9
  101. package/dist/mjs/data-structures/queue/queue.js.map +1 -1
  102. package/dist/mjs/data-structures/stack/stack.d.ts +27 -10
  103. package/dist/mjs/data-structures/stack/stack.js +39 -20
  104. package/dist/mjs/data-structures/stack/stack.js.map +1 -1
  105. package/dist/mjs/data-structures/trie/trie.d.ts +111 -6
  106. package/dist/mjs/data-structures/trie/trie.js +123 -14
  107. package/dist/mjs/data-structures/trie/trie.js.map +1 -1
  108. package/dist/mjs/index.d.ts +1 -1
  109. package/dist/mjs/index.js +1 -1
  110. package/dist/mjs/index.js.map +1 -1
  111. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  112. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +3 -2
  113. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -1
  114. package/dist/mjs/types/utils/utils.d.ts +10 -6
  115. package/dist/mjs/utils/utils.js +4 -2
  116. package/dist/mjs/utils/utils.js.map +1 -1
  117. package/dist/umd/data-structure-typed.js +671 -246
  118. package/dist/umd/data-structure-typed.min.js +3 -3
  119. package/dist/umd/data-structure-typed.min.js.map +1 -1
  120. package/package.json +7 -7
  121. package/src/common/index.ts +25 -0
  122. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +9 -11
  123. package/src/data-structures/binary-tree/avl-tree.ts +3 -2
  124. package/src/data-structures/binary-tree/binary-tree.ts +110 -66
  125. package/src/data-structures/binary-tree/bst.ts +232 -72
  126. package/src/data-structures/binary-tree/index.ts +1 -1
  127. package/src/data-structures/binary-tree/{rb-tree.ts → red-black-tree.ts} +56 -3
  128. package/src/data-structures/binary-tree/tree-multi-map.ts +6 -6
  129. package/src/data-structures/hash/hash-map.ts +30 -0
  130. package/src/data-structures/heap/heap.ts +72 -49
  131. package/src/data-structures/linked-list/doubly-linked-list.ts +173 -105
  132. package/src/data-structures/linked-list/singly-linked-list.ts +61 -11
  133. package/src/data-structures/queue/deque.ts +72 -28
  134. package/src/data-structures/queue/queue.ts +50 -7
  135. package/src/data-structures/stack/stack.ts +39 -20
  136. package/src/data-structures/trie/trie.ts +123 -13
  137. package/src/index.ts +1 -1
  138. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -1
  139. package/src/types/data-structures/binary-tree/bst.ts +3 -2
  140. package/src/types/data-structures/binary-tree/rb-tree.ts +1 -1
  141. package/src/types/utils/utils.ts +16 -10
  142. package/src/utils/utils.ts +4 -2
  143. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +3 -0
  144. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +4 -1
  145. package/test/performance/reportor.ts +38 -33
  146. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +2 -2
  147. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +47 -47
  148. package/test/unit/data-structures/binary-tree/bst.test.ts +114 -44
  149. package/test/unit/data-structures/binary-tree/overall.test.ts +14 -22
  150. package/test/unit/data-structures/binary-tree/{rb-tree.test.ts → red-black-tree.test.ts} +55 -1
  151. package/test/unit/data-structures/trie/trie.test.ts +151 -0
  152. package/test/unit/utils/utils.test.ts +6 -6
  153. package/dist/cjs/constants/index.d.ts +0 -4
  154. package/dist/cjs/constants/index.js +0 -9
  155. package/dist/cjs/constants/index.js.map +0 -1
  156. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +0 -1
  157. package/dist/mjs/constants/index.d.ts +0 -4
  158. package/dist/mjs/constants/index.js +0 -6
  159. package/dist/mjs/constants/index.js.map +0 -1
  160. package/dist/mjs/data-structures/binary-tree/rb-tree.js.map +0 -1
  161. package/src/constants/index.ts +0 -4
@@ -1,6 +1,7 @@
1
1
  import { BinaryTree, BinaryTreeNode } from './binary-tree';
2
2
  import { Queue } from '../queue';
3
3
  import { isComparable } from '../../utils';
4
+ import { Range } from '../../common';
4
5
  export class BSTNode extends BinaryTreeNode {
5
6
  parent;
6
7
  constructor(key, value) {
@@ -57,6 +58,62 @@ export class BSTNode extends BinaryTreeNode {
57
58
  * 5. Logarithmic Operations: Ideal operations like insertion, deletion, and searching are O(log n) time-efficient.
58
59
  * 6. Balance Variability: Can become unbalanced; special types maintain balance.
59
60
  * 7. No Auto-Balancing: Standard BSTs don't automatically balance themselves.
61
+ * @example
62
+ * // Merge 3 sorted datasets
63
+ * const dataset1 = new BST<number, string>([
64
+ * [1, 'A'],
65
+ * [7, 'G']
66
+ * ]);
67
+ * const dataset2 = [
68
+ * [2, 'B'],
69
+ * [6, 'F']
70
+ * ];
71
+ * const dataset3 = new BST<number, string>([
72
+ * [3, 'C'],
73
+ * [5, 'E'],
74
+ * [4, 'D']
75
+ * ]);
76
+ *
77
+ * // Merge datasets into a single BinarySearchTree
78
+ * const merged = new BST<number, string>(dataset1);
79
+ * merged.addMany(dataset2);
80
+ * merged.merge(dataset3);
81
+ *
82
+ * // Verify merged dataset is in sorted order
83
+ * console.log([...merged.values()]); // ['A', 'B', 'C', 'D', 'E', 'F', 'G']
84
+ * @example
85
+ * // Find elements in a range
86
+ * const bst = new BST<number>([10, 5, 15, 3, 7, 12, 18]);
87
+ * console.log(bst.search(new Range(5, 10))); // [10, 5, 7]
88
+ * console.log(bst.rangeSearch([4, 12], node => node.key.toString())); // ['10', '12', '5', '7']
89
+ * console.log(bst.search(new Range(4, 12, true, false))); // [10, 5, 7]
90
+ * console.log(bst.rangeSearch([15, 20])); // [15, 18]
91
+ * console.log(bst.search(new Range(15, 20, false))); // [18]
92
+ * @example
93
+ * // Find lowest common ancestor
94
+ * const bst = new BST<number>([20, 10, 30, 5, 15, 25, 35, 3, 7, 12, 18]);
95
+ *
96
+ * // LCA helper function
97
+ * const findLCA = (num1: number, num2: number): number | undefined => {
98
+ * const path1 = bst.getPathToRoot(num1);
99
+ * const path2 = bst.getPathToRoot(num2);
100
+ * // Find the first common ancestor
101
+ * return findFirstCommon(path1, path2);
102
+ * };
103
+ *
104
+ * function findFirstCommon(arr1: number[], arr2: number[]): number | undefined {
105
+ * for (const num of arr1) {
106
+ * if (arr2.indexOf(num) !== -1) {
107
+ * return num;
108
+ * }
109
+ * }
110
+ * return undefined;
111
+ * }
112
+ *
113
+ * // Assertions
114
+ * console.log(findLCA(3, 10)); // 7
115
+ * console.log(findLCA(5, 35)); // 15
116
+ * console.log(findLCA(20, 30)); // 25
60
117
  */
61
118
  export class BST extends BinaryTree {
62
119
  /**
@@ -70,9 +127,11 @@ export class BST extends BinaryTree {
70
127
  constructor(keysNodesEntriesOrRaws = [], options) {
71
128
  super([], options);
72
129
  if (options) {
73
- const { comparator } = options;
74
- if (comparator)
75
- this._comparator = comparator;
130
+ const { extractComparable, isReverse } = options;
131
+ if (typeof extractComparable === 'function')
132
+ this._extractComparable = extractComparable;
133
+ if (isReverse !== undefined)
134
+ this._isReverse = isReverse;
76
135
  }
77
136
  if (keysNodesEntriesOrRaws)
78
137
  this.addMany(keysNodesEntriesOrRaws);
@@ -85,6 +144,15 @@ export class BST extends BinaryTree {
85
144
  get root() {
86
145
  return this._root;
87
146
  }
147
+ _isReverse = false;
148
+ /**
149
+ * The above function is a getter method in TypeScript that returns the value of the private property
150
+ * `_isReverse`.
151
+ * @returns The `isReverse` property of the object, which is a boolean value.
152
+ */
153
+ get isReverse() {
154
+ return this._isReverse;
155
+ }
88
156
  /**
89
157
  * The function creates a new BSTNode with the given key and value and returns it.
90
158
  * @param {K} key - The key parameter is of type K, which represents the type of the key for the node
@@ -107,8 +175,9 @@ export class BST extends BinaryTree {
107
175
  return new BST([], {
108
176
  iterationType: this.iterationType,
109
177
  isMapMode: this._isMapMode,
110
- comparator: this._comparator,
178
+ extractComparable: this._extractComparable,
111
179
  toEntryFn: this._toEntryFn,
180
+ isReverse: this._isReverse,
112
181
  ...options
113
182
  });
114
183
  }
@@ -121,8 +190,8 @@ export class BST extends BinaryTree {
121
190
  * value associated with a key in a key-value pair.
122
191
  * @returns either a NODE object or undefined.
123
192
  */
124
- keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value) {
125
- const [node, entryValue] = super.keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value);
193
+ _keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value) {
194
+ const [node, entryValue] = super._keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value);
126
195
  if (node === null)
127
196
  return [undefined, undefined];
128
197
  return [node, value ?? entryValue];
@@ -160,11 +229,11 @@ export class BST extends BinaryTree {
160
229
  * @param {any} key - The `key` parameter is a value that will be checked to determine if it is of
161
230
  * type `K`.
162
231
  * @returns The `override isKey(key: any): key is K` function is returning a boolean value based on
163
- * the result of the `isComparable` function with the condition `this.comparator !==
232
+ * the result of the `isComparable` function with the condition `this._compare !==
164
233
  * this._DEFAULT_COMPARATOR`.
165
234
  */
166
235
  isKey(key) {
167
- return isComparable(key, this.comparator !== this._DEFAULT_COMPARATOR);
236
+ return isComparable(key, this._extractComparable !== undefined);
168
237
  }
169
238
  /**
170
239
  * Time Complexity: O(log n)
@@ -178,7 +247,7 @@ export class BST extends BinaryTree {
178
247
  * @returns a boolean value.
179
248
  */
180
249
  add(keyNodeEntryOrRaw, value) {
181
- const [newNode, newValue] = this.keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value);
250
+ const [newNode, newValue] = this._keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value);
182
251
  if (newNode === undefined)
183
252
  return false;
184
253
  if (this._root === undefined) {
@@ -190,13 +259,13 @@ export class BST extends BinaryTree {
190
259
  }
191
260
  let current = this._root;
192
261
  while (current !== undefined) {
193
- if (this.comparator(current.key, newNode.key) === 0) {
262
+ if (this._compare(current.key, newNode.key) === 0) {
194
263
  this._replaceNode(current, newNode);
195
264
  if (this._isMapMode)
196
265
  this._setValue(current.key, newValue);
197
266
  return true;
198
267
  }
199
- else if (this.comparator(current.key, newNode.key) > 0) {
268
+ else if (this._compare(current.key, newNode.key) > 0) {
200
269
  if (current.left === undefined) {
201
270
  current.left = newNode;
202
271
  if (this._isMapMode)
@@ -283,7 +352,7 @@ export class BST extends BinaryTree {
283
352
  keyB = b;
284
353
  }
285
354
  if (keyA !== undefined && keyA !== null && keyB !== undefined && keyB !== null) {
286
- return this.comparator(keyA, keyB);
355
+ return this._compare(keyA, keyB);
287
356
  }
288
357
  return 0;
289
358
  });
@@ -321,30 +390,47 @@ export class BST extends BinaryTree {
321
390
  }
322
391
  return inserted;
323
392
  }
393
+ /**
394
+ * Time Complexity: O(n)
395
+ * Space Complexity: O(1)
396
+ *
397
+ * The `merge` function overrides the base class method by adding elements from another
398
+ * binary search tree.
399
+ * @param anotherTree - `anotherTree` is an instance of a Binary Search Tree (BST) with key type `K`,
400
+ * value type `V`, return type `R`, node type `NODE`, and tree type `TREE`.
401
+ */
402
+ merge(anotherTree) {
403
+ this.addMany(anotherTree, [], false);
404
+ }
324
405
  /**
325
406
  * Time Complexity: O(log n)
326
407
  * Space Complexity: O(k + log n)
327
408
  *
328
- * The function `getNodes` in TypeScript overrides the base class method to retrieve nodes based on a
329
- * given keyNodeEntryRawOrPredicate and iteration type.
330
- * @param {BTNRep<K, V, NODE> | R | NodePredicate<NODE>} keyNodeEntryRawOrPredicate - The `keyNodeEntryRawOrPredicate`
331
- * parameter in the `getNodes` method is used to filter the nodes that will be returned. It can be a
332
- * key, a node, an entry, or a custom keyNodeEntryRawOrPredicate function that determines whether a node should be
333
- * included in the result.
334
- * @param [onlyOne=false] - The `onlyOne` parameter in the `getNodes` method is a boolean flag that
335
- * determines whether to return only the first node that matches the keyNodeEntryRawOrPredicate (`true`) or all nodes
336
- * that match the keyNodeEntryRawOrPredicate (`false`). If `onlyOne` is set to `true`, the method will stop iterating
337
- * and
338
- * @param {BTNRep<K, V, NODE> | R} startNode - The `startNode` parameter in the
339
- * `getNodes` method is used to specify the starting point for traversing the tree when searching for
340
- * nodes that match a given keyNodeEntryRawOrPredicate. It represents the root node of the subtree where the search
341
- * should begin. If not explicitly provided, the default value for `begin
342
- * @param {IterationType} iterationType - The `iterationType` parameter in the `getNodes` method
343
- * specifies the type of iteration to be performed when traversing the nodes of a binary tree. It can
344
- * have two possible values:
345
- * @returns The `getNodes` method returns an array of nodes that satisfy the given keyNodeEntryRawOrPredicate.
409
+ * The function `search` in TypeScript overrides the search behavior in a binary tree structure based
410
+ * on specified criteria.
411
+ * @param {BTNRep<K, V, NODE> | R | NodePredicate<NODE>} keyNodeEntryRawOrPredicate - The
412
+ * `keyNodeEntryRawOrPredicate` parameter in the `override search` method can accept one of the
413
+ * following types:
414
+ * @param [onlyOne=false] - The `onlyOne` parameter is a boolean flag that determines whether the
415
+ * search should stop after finding the first matching node. If `onlyOne` is set to `true`, the
416
+ * search will return as soon as a matching node is found. If `onlyOne` is set to `false`, the
417
+ * @param {C} callback - The `callback` parameter in the `override search` function is a function
418
+ * that will be called on each node that matches the search criteria. It is of type `C`, which
419
+ * extends `NodeCallback<NODE>`. The callback function should accept a node of type `NODE` as its
420
+ * argument and
421
+ * @param {BTNRep<K, V, NODE> | R} startNode - The `startNode` parameter in the `override search`
422
+ * method represents the node from which the search operation will begin. It is the starting point
423
+ * for searching within the tree data structure. The method ensures that the `startNode` is a valid
424
+ * node before proceeding with the search operation. If the `
425
+ * @param {IterationType} iterationType - The `iterationType` parameter in the `override search`
426
+ * function determines the type of iteration to be used during the search operation. It can have two
427
+ * possible values:
428
+ * @returns The `override search` method returns an array of values that match the search criteria
429
+ * specified by the input parameters. The method performs a search operation on a binary tree
430
+ * structure based on the provided key, predicate, and other options. The search results are
431
+ * collected in an array and returned as the output of the method.
346
432
  */
347
- getNodes(keyNodeEntryRawOrPredicate, onlyOne = false, startNode = this._root, iterationType = this.iterationType) {
433
+ search(keyNodeEntryRawOrPredicate, onlyOne = false, callback = this._DEFAULT_NODE_CALLBACK, startNode = this._root, iterationType = this.iterationType) {
348
434
  if (keyNodeEntryRawOrPredicate === undefined)
349
435
  return [];
350
436
  if (keyNodeEntryRawOrPredicate === null)
@@ -352,28 +438,60 @@ export class BST extends BinaryTree {
352
438
  startNode = this.ensureNode(startNode);
353
439
  if (!startNode)
354
440
  return [];
355
- const callback = this._ensurePredicate(keyNodeEntryRawOrPredicate);
441
+ let predicate;
442
+ const isRange = this.isRange(keyNodeEntryRawOrPredicate);
443
+ // Set predicate based on parameter type
444
+ if (isRange) {
445
+ predicate = node => keyNodeEntryRawOrPredicate.isInRange(node.key, this._comparator);
446
+ }
447
+ else {
448
+ predicate = this._ensurePredicate(keyNodeEntryRawOrPredicate);
449
+ }
450
+ const isToLeftByRange = (cur) => {
451
+ if (isRange) {
452
+ const range = keyNodeEntryRawOrPredicate;
453
+ const leftS = this.isReverse ? range.high : range.low;
454
+ const leftI = this.isReverse ? range.includeHigh : range.includeLow;
455
+ return (leftI && this._compare(cur.key, leftS) >= 0) || (!leftI && this._compare(cur.key, leftS) > 0);
456
+ }
457
+ return false;
458
+ };
459
+ const isToRightByRange = (cur) => {
460
+ if (isRange) {
461
+ const range = keyNodeEntryRawOrPredicate;
462
+ const rightS = this.isReverse ? range.low : range.high;
463
+ const rightI = this.isReverse ? range.includeLow : range.includeLow;
464
+ return (rightI && this._compare(cur.key, rightS) <= 0) || (!rightI && this._compare(cur.key, rightS) < 0);
465
+ }
466
+ return false;
467
+ };
356
468
  const ans = [];
357
469
  if (iterationType === 'RECURSIVE') {
358
470
  const dfs = (cur) => {
359
- if (callback(cur)) {
360
- ans.push(cur);
471
+ if (predicate(cur)) {
472
+ ans.push(callback(cur));
361
473
  if (onlyOne)
362
474
  return;
363
475
  }
364
476
  if (!this.isRealNode(cur.left) && !this.isRealNode(cur.right))
365
477
  return;
366
- if (!this._isPredicate(keyNodeEntryRawOrPredicate)) {
367
- const benchmarkKey = this._getKey(keyNodeEntryRawOrPredicate);
478
+ if (isRange) {
479
+ if (this.isRealNode(cur.left) && isToLeftByRange(cur))
480
+ dfs(cur.left);
481
+ if (this.isRealNode(cur.right) && isToRightByRange(cur))
482
+ dfs(cur.right);
483
+ }
484
+ else if (!this._isPredicate(keyNodeEntryRawOrPredicate)) {
485
+ const benchmarkKey = this._extractKey(keyNodeEntryRawOrPredicate);
368
486
  if (this.isRealNode(cur.left) &&
369
487
  benchmarkKey !== null &&
370
488
  benchmarkKey !== undefined &&
371
- this.comparator(cur.key, benchmarkKey) > 0)
489
+ this._compare(cur.key, benchmarkKey) > 0)
372
490
  dfs(cur.left);
373
491
  if (this.isRealNode(cur.right) &&
374
492
  benchmarkKey !== null &&
375
493
  benchmarkKey !== undefined &&
376
- this.comparator(cur.key, benchmarkKey) < 0)
494
+ this._compare(cur.key, benchmarkKey) < 0)
377
495
  dfs(cur.right);
378
496
  }
379
497
  else {
@@ -389,22 +507,28 @@ export class BST extends BinaryTree {
389
507
  const stack = [startNode];
390
508
  while (stack.length > 0) {
391
509
  const cur = stack.pop();
392
- if (callback(cur)) {
393
- ans.push(cur);
510
+ if (predicate(cur)) {
511
+ ans.push(callback(cur));
394
512
  if (onlyOne)
395
513
  return ans;
396
514
  }
397
- if (!this._isPredicate(keyNodeEntryRawOrPredicate)) {
398
- const benchmarkKey = this._getKey(keyNodeEntryRawOrPredicate);
515
+ if (isRange) {
516
+ if (this.isRealNode(cur.left) && isToLeftByRange(cur))
517
+ stack.push(cur.left);
518
+ if (this.isRealNode(cur.right) && isToRightByRange(cur))
519
+ stack.push(cur.right);
520
+ }
521
+ else if (!this._isPredicate(keyNodeEntryRawOrPredicate)) {
522
+ const benchmarkKey = this._extractKey(keyNodeEntryRawOrPredicate);
399
523
  if (this.isRealNode(cur.right) &&
400
524
  benchmarkKey !== null &&
401
525
  benchmarkKey !== undefined &&
402
- this.comparator(cur.key, benchmarkKey) < 0)
526
+ this._compare(cur.key, benchmarkKey) < 0)
403
527
  stack.push(cur.right);
404
528
  if (this.isRealNode(cur.left) &&
405
529
  benchmarkKey !== null &&
406
530
  benchmarkKey !== undefined &&
407
- this.comparator(cur.key, benchmarkKey) > 0)
531
+ this._compare(cur.key, benchmarkKey) > 0)
408
532
  stack.push(cur.left);
409
533
  }
410
534
  else {
@@ -417,6 +541,31 @@ export class BST extends BinaryTree {
417
541
  }
418
542
  return ans;
419
543
  }
544
+ /**
545
+ * Time Complexity: O(log n)
546
+ * Space Complexity: O(n)
547
+ *
548
+ * The `rangeSearch` function searches for nodes within a specified range in a binary search tree.
549
+ * @param {Range<K> | [K, K]} range - The `range` parameter in the `rangeSearch` function can be
550
+ * either a `Range` object or an array of two elements representing the range boundaries.
551
+ * @param {C} callback - The `callback` parameter in the `rangeSearch` function is a callback
552
+ * function that is used to process each node that is found within the specified range during the
553
+ * search operation. It is of type `NodeCallback<NODE>`, where `NODE` is the type of nodes in the
554
+ * data structure.
555
+ * @param {BTNRep<K, V, NODE> | R} startNode - The `startNode` parameter in the `rangeSearch`
556
+ * function represents the node from which the search for nodes within the specified range will
557
+ * begin. It is the starting point for the range search operation.
558
+ * @param {IterationType} iterationType - The `iterationType` parameter in the `rangeSearch` function
559
+ * is used to specify the type of iteration to be performed during the search operation. It has a
560
+ * default value of `this.iterationType`, which suggests that it is likely a property of the class or
561
+ * object that the `rangeSearch`
562
+ * @returns The `rangeSearch` function is returning the result of calling the `search` method with
563
+ * the specified parameters.
564
+ */
565
+ rangeSearch(range, callback = this._DEFAULT_NODE_CALLBACK, startNode = this._root, iterationType = this.iterationType) {
566
+ const searchRange = range instanceof Range ? range : new Range(range[0], range[1]);
567
+ return this.search(searchRange, false, callback, startNode, iterationType);
568
+ }
420
569
  /**
421
570
  * Time Complexity: O(log n)
422
571
  * Space Complexity: O(1)
@@ -440,22 +589,6 @@ export class BST extends BinaryTree {
440
589
  getNode(keyNodeEntryRawOrPredicate, startNode = this._root, iterationType = this.iterationType) {
441
590
  return this.getNodes(keyNodeEntryRawOrPredicate, true, startNode, iterationType)[0] ?? undefined;
442
591
  }
443
- /**
444
- * Time Complexity: O(log n)
445
- * Space Complexity: O(1)
446
- *
447
- * The function `getNodeByKey` returns a node with a specific key from a tree data structure.
448
- * @param {K} key - The key parameter is the value used to search for a specific node in the tree. It
449
- * is typically a unique identifier or a value that can be used to determine the position of the node
450
- * in the tree structure.
451
- * @param {IterationType} [iterationType=ITERATIVE] - The `iterationType` parameter is an optional
452
- * parameter that specifies the type of iteration to be used when searching for a node in the tree.
453
- * It has a default value of `'ITERATIVE'`.
454
- * @returns The method is returning a NODE object or undefined.
455
- */
456
- getNodeByKey(key, iterationType = this.iterationType) {
457
- return this.getNode(key, this._root, iterationType);
458
- }
459
592
  /**
460
593
  * Time complexity: O(n)
461
594
  * Space complexity: O(n)
@@ -551,9 +684,10 @@ export class BST extends BinaryTree {
551
684
  const targetKey = targetNodeEnsured.key;
552
685
  if (iterationType === 'RECURSIVE') {
553
686
  const dfs = (cur) => {
554
- const compared = this.comparator(cur.key, targetKey);
687
+ const compared = this._compare(cur.key, targetKey);
555
688
  if (Math.sign(compared) === lesserOrGreater)
556
689
  ans.push(callback(cur));
690
+ // TODO here can be optimized to O(log n)
557
691
  if (this.isRealNode(cur.left))
558
692
  dfs(cur.left);
559
693
  if (this.isRealNode(cur.right))
@@ -567,7 +701,7 @@ export class BST extends BinaryTree {
567
701
  while (queue.size > 0) {
568
702
  const cur = queue.shift();
569
703
  if (this.isRealNode(cur)) {
570
- const compared = this.comparator(cur.key, targetKey);
704
+ const compared = this._compare(cur.key, targetKey);
571
705
  if (Math.sign(compared) === lesserOrGreater)
572
706
  ans.push(callback(cur));
573
707
  if (this.isRealNode(cur.left))
@@ -690,17 +824,26 @@ export class BST extends BinaryTree {
690
824
  }
691
825
  return balanced;
692
826
  }
693
- _DEFAULT_COMPARATOR = (a, b) => {
827
+ _comparator = (a, b) => {
828
+ if (isComparable(a) && isComparable(b)) {
829
+ if (a > b)
830
+ return 1;
831
+ if (a < b)
832
+ return -1;
833
+ return 0;
834
+ }
835
+ if (this._extractComparable) {
836
+ if (this._extractComparable(a) > this._extractComparable(b))
837
+ return 1;
838
+ if (this._extractComparable(a) < this._extractComparable(b))
839
+ return -1;
840
+ return 0;
841
+ }
694
842
  if (typeof a === 'object' || typeof b === 'object') {
695
- throw TypeError(`When comparing object types, a custom comparator must be defined in the constructor's options parameter.`);
843
+ throw TypeError(`When comparing object types, a custom extractComparable must be defined in the constructor's options parameter.`);
696
844
  }
697
- if (a > b)
698
- return 1;
699
- if (a < b)
700
- return -1;
701
845
  return 0;
702
846
  };
703
- _comparator = this._DEFAULT_COMPARATOR;
704
847
  /**
705
848
  * The function returns the value of the _comparator property.
706
849
  * @returns The `_comparator` property is being returned.
@@ -708,6 +851,15 @@ export class BST extends BinaryTree {
708
851
  get comparator() {
709
852
  return this._comparator;
710
853
  }
854
+ _extractComparable;
855
+ /**
856
+ * This function returns the value of the `_extractComparable` property.
857
+ * @returns The method `extractComparable()` is being returned, which is a getter method for the
858
+ * `_extractComparable` property.
859
+ */
860
+ get extractComparable() {
861
+ return this._extractComparable;
862
+ }
711
863
  /**
712
864
  * The function sets the root of a tree-like structure and updates the parent property of the new
713
865
  * root.
@@ -719,5 +871,8 @@ export class BST extends BinaryTree {
719
871
  }
720
872
  this._root = v;
721
873
  }
874
+ _compare(a, b) {
875
+ return this._isReverse ? -this._comparator(a, b) : this._comparator(a, b);
876
+ }
722
877
  }
723
878
  //# sourceMappingURL=bst.js.map
@@ -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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"}
@@ -3,6 +3,6 @@ export * from './bst';
3
3
  export * from './binary-indexed-tree';
4
4
  export * from './segment-tree';
5
5
  export * from './avl-tree';
6
- export * from './rb-tree';
6
+ export * from './red-black-tree';
7
7
  export * from './avl-tree-multi-map';
8
8
  export * from './tree-multi-map';
@@ -3,7 +3,7 @@ export * from './bst';
3
3
  export * from './binary-indexed-tree';
4
4
  export * from './segment-tree';
5
5
  export * from './avl-tree';
6
- export * from './rb-tree';
6
+ export * from './red-black-tree';
7
7
  export * from './avl-tree-multi-map';
8
8
  export * from './tree-multi-map';
9
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC;AACtB,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC;AACtB,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
@@ -26,6 +26,62 @@ export declare class RedBlackTreeNode<K = any, V = any, NODE extends RedBlackTre
26
26
  */
27
27
  set color(value: RBTNColor);
28
28
  }
29
+ /**
30
+ * 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.
31
+ * 2. It is BST itself. Compared with Heap which is not completely ordered, RedBlackTree is completely ordered.
32
+ * @example
33
+ * // Find elements in a range
34
+ * const bst = new RedBlackTree<number>([10, 5, 15, 3, 7, 12, 18]);
35
+ * console.log(bst.search(new Range(5, 10))); // [5, 10, 7]
36
+ * console.log(bst.search(new Range(4, 12))); // [5, 10, 12, 7]
37
+ * console.log(bst.search(new Range(15, 20))); // [15, 18]
38
+ * @example
39
+ * // using Red-Black Tree as a price-based index for stock data
40
+ * // Define the structure of individual stock records
41
+ * interface StockRecord {
42
+ * price: number; // Stock price (key for indexing)
43
+ * symbol: string; // Stock ticker symbol
44
+ * volume: number; // Trade volume
45
+ * }
46
+ *
47
+ * // Simulate stock market data as it might come from an external feed
48
+ * const marketStockData: StockRecord[] = [
49
+ * { price: 142.5, symbol: 'AAPL', volume: 1000000 },
50
+ * { price: 335.2, symbol: 'MSFT', volume: 800000 },
51
+ * { price: 3285.04, symbol: 'AMZN', volume: 500000 },
52
+ * { price: 267.98, symbol: 'META', volume: 750000 },
53
+ * { price: 234.57, symbol: 'GOOGL', volume: 900000 }
54
+ * ];
55
+ *
56
+ * // Extend the stock record type to include metadata for database usage
57
+ * type StockTableRecord = StockRecord & { lastUpdated: Date };
58
+ *
59
+ * // Create a Red-Black Tree to index stock records by price
60
+ * // Simulates a database index with stock price as the key for quick lookups
61
+ * const priceIndex = new RedBlackTree<number, StockTableRecord, StockRecord>(
62
+ * marketStockData,
63
+ * {
64
+ * toEntryFn: stockRecord => [
65
+ * stockRecord.price, // Use stock price as the key
66
+ * {
67
+ * ...stockRecord,
68
+ * lastUpdated: new Date() // Add a timestamp for when the record was indexed
69
+ * }
70
+ * ]
71
+ * }
72
+ * );
73
+ *
74
+ * // Query the stock with the highest price
75
+ * const highestPricedStock = priceIndex.getRightMost();
76
+ * console.log(priceIndex.get(highestPricedStock)?.symbol); // 'AMZN' // Amazon has the highest price
77
+ *
78
+ * // Query stocks within a specific price range (200 to 400)
79
+ * const stocksInRange = priceIndex.rangeSearch(
80
+ * [200, 400], // Price range
81
+ * node => priceIndex.get(node)?.symbol // Extract stock symbols for the result
82
+ * );
83
+ * console.log(stocksInRange); // ['GOOGL', 'MSFT', 'META']
84
+ */
29
85
  export declare class RedBlackTree<K = any, V = any, R = object, NODE extends RedBlackTreeNode<K, V, NODE> = RedBlackTreeNode<K, V, RedBlackTreeNodeNested<K, V>>, TREE extends RedBlackTree<K, V, R, NODE, TREE> = RedBlackTree<K, V, R, NODE, RedBlackTreeNested<K, V, R, NODE>>> extends BST<K, V, R, NODE, TREE> implements IBinaryTree<K, V, R, NODE, TREE> {
30
86
  /**
31
87
  * This is the constructor function for a Red-Black Tree data structure in TypeScript.