data-structure-typed 1.3.3 → 1.3.5

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 (189) hide show
  1. package/dist/bundle.js +1 -1
  2. package/dist/data-structures/binary-tree/aa-tree.js +1 -0
  3. package/dist/data-structures/binary-tree/aa-tree.js.map +1 -0
  4. package/dist/data-structures/binary-tree/abstract-binary-tree.d.ts +24 -19
  5. package/dist/data-structures/binary-tree/abstract-binary-tree.js +41 -36
  6. package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -0
  7. package/dist/data-structures/binary-tree/avl-tree.js +35 -27
  8. package/dist/data-structures/binary-tree/avl-tree.js.map +1 -0
  9. package/dist/data-structures/binary-tree/b-tree.js +1 -0
  10. package/dist/data-structures/binary-tree/b-tree.js.map +1 -0
  11. package/dist/data-structures/binary-tree/binary-indexed-tree.js +1 -0
  12. package/dist/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
  13. package/dist/data-structures/binary-tree/binary-tree.js +1 -0
  14. package/dist/data-structures/binary-tree/binary-tree.js.map +1 -0
  15. package/dist/data-structures/binary-tree/bst.d.ts +19 -8
  16. package/dist/data-structures/binary-tree/bst.js +101 -14
  17. package/dist/data-structures/binary-tree/bst.js.map +1 -0
  18. package/dist/data-structures/binary-tree/index.js +1 -0
  19. package/dist/data-structures/binary-tree/index.js.map +1 -0
  20. package/dist/data-structures/binary-tree/rb-tree.js +1 -0
  21. package/dist/data-structures/binary-tree/rb-tree.js.map +1 -0
  22. package/dist/data-structures/binary-tree/segment-tree.js +1 -0
  23. package/dist/data-structures/binary-tree/segment-tree.js.map +1 -0
  24. package/dist/data-structures/binary-tree/splay-tree.js +1 -0
  25. package/dist/data-structures/binary-tree/splay-tree.js.map +1 -0
  26. package/dist/data-structures/binary-tree/tree-multiset.d.ts +20 -23
  27. package/dist/data-structures/binary-tree/tree-multiset.js +27 -38
  28. package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -0
  29. package/dist/data-structures/binary-tree/two-three-tree.js +1 -0
  30. package/dist/data-structures/binary-tree/two-three-tree.js.map +1 -0
  31. package/dist/data-structures/graph/abstract-graph.js +1 -0
  32. package/dist/data-structures/graph/abstract-graph.js.map +1 -0
  33. package/dist/data-structures/graph/directed-graph.js +1 -0
  34. package/dist/data-structures/graph/directed-graph.js.map +1 -0
  35. package/dist/data-structures/graph/index.js +1 -0
  36. package/dist/data-structures/graph/index.js.map +1 -0
  37. package/dist/data-structures/graph/map-graph.js +1 -0
  38. package/dist/data-structures/graph/map-graph.js.map +1 -0
  39. package/dist/data-structures/graph/undirected-graph.js +1 -0
  40. package/dist/data-structures/graph/undirected-graph.js.map +1 -0
  41. package/dist/data-structures/hash/coordinate-map.js +1 -0
  42. package/dist/data-structures/hash/coordinate-map.js.map +1 -0
  43. package/dist/data-structures/hash/coordinate-set.js +1 -0
  44. package/dist/data-structures/hash/coordinate-set.js.map +1 -0
  45. package/dist/data-structures/hash/hash-table.js +1 -0
  46. package/dist/data-structures/hash/hash-table.js.map +1 -0
  47. package/dist/data-structures/hash/index.js +1 -0
  48. package/dist/data-structures/hash/index.js.map +1 -0
  49. package/dist/data-structures/hash/pair.js +1 -0
  50. package/dist/data-structures/hash/pair.js.map +1 -0
  51. package/dist/data-structures/hash/tree-map.js +1 -0
  52. package/dist/data-structures/hash/tree-map.js.map +1 -0
  53. package/dist/data-structures/hash/tree-set.js +1 -0
  54. package/dist/data-structures/hash/tree-set.js.map +1 -0
  55. package/dist/data-structures/heap/heap.js +1 -0
  56. package/dist/data-structures/heap/heap.js.map +1 -0
  57. package/dist/data-structures/heap/index.js +1 -0
  58. package/dist/data-structures/heap/index.js.map +1 -0
  59. package/dist/data-structures/heap/max-heap.js +1 -0
  60. package/dist/data-structures/heap/max-heap.js.map +1 -0
  61. package/dist/data-structures/heap/min-heap.js +1 -0
  62. package/dist/data-structures/heap/min-heap.js.map +1 -0
  63. package/dist/data-structures/index.js +1 -0
  64. package/dist/data-structures/index.js.map +1 -0
  65. package/dist/data-structures/linked-list/doubly-linked-list.js +1 -0
  66. package/dist/data-structures/linked-list/doubly-linked-list.js.map +1 -0
  67. package/dist/data-structures/linked-list/index.js +1 -0
  68. package/dist/data-structures/linked-list/index.js.map +1 -0
  69. package/dist/data-structures/linked-list/singly-linked-list.js +1 -0
  70. package/dist/data-structures/linked-list/singly-linked-list.js.map +1 -0
  71. package/dist/data-structures/linked-list/skip-linked-list.js +1 -0
  72. package/dist/data-structures/linked-list/skip-linked-list.js.map +1 -0
  73. package/dist/data-structures/matrix/index.js +1 -0
  74. package/dist/data-structures/matrix/index.js.map +1 -0
  75. package/dist/data-structures/matrix/matrix.js +1 -0
  76. package/dist/data-structures/matrix/matrix.js.map +1 -0
  77. package/dist/data-structures/matrix/matrix2d.js +1 -0
  78. package/dist/data-structures/matrix/matrix2d.js.map +1 -0
  79. package/dist/data-structures/matrix/navigator.js +1 -0
  80. package/dist/data-structures/matrix/navigator.js.map +1 -0
  81. package/dist/data-structures/matrix/vector2d.js +1 -0
  82. package/dist/data-structures/matrix/vector2d.js.map +1 -0
  83. package/dist/data-structures/priority-queue/index.js +1 -0
  84. package/dist/data-structures/priority-queue/index.js.map +1 -0
  85. package/dist/data-structures/priority-queue/max-priority-queue.js +1 -0
  86. package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -0
  87. package/dist/data-structures/priority-queue/min-priority-queue.js +1 -0
  88. package/dist/data-structures/priority-queue/min-priority-queue.js.map +1 -0
  89. package/dist/data-structures/priority-queue/priority-queue.js +1 -0
  90. package/dist/data-structures/priority-queue/priority-queue.js.map +1 -0
  91. package/dist/data-structures/queue/deque.js +1 -0
  92. package/dist/data-structures/queue/deque.js.map +1 -0
  93. package/dist/data-structures/queue/index.js +1 -0
  94. package/dist/data-structures/queue/index.js.map +1 -0
  95. package/dist/data-structures/queue/queue.js +1 -0
  96. package/dist/data-structures/queue/queue.js.map +1 -0
  97. package/dist/data-structures/stack/index.js +1 -0
  98. package/dist/data-structures/stack/index.js.map +1 -0
  99. package/dist/data-structures/stack/stack.js +1 -0
  100. package/dist/data-structures/stack/stack.js.map +1 -0
  101. package/dist/data-structures/tree/index.js +1 -0
  102. package/dist/data-structures/tree/index.js.map +1 -0
  103. package/dist/data-structures/tree/tree.js +1 -0
  104. package/dist/data-structures/tree/tree.js.map +1 -0
  105. package/dist/data-structures/trie/index.js +1 -0
  106. package/dist/data-structures/trie/index.js.map +1 -0
  107. package/dist/data-structures/trie/trie.js +1 -0
  108. package/dist/data-structures/trie/trie.js.map +1 -0
  109. package/dist/index.js +1 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/interfaces/abstract-binary-tree.js +1 -0
  112. package/dist/interfaces/abstract-binary-tree.js.map +1 -0
  113. package/dist/interfaces/abstract-graph.js +1 -0
  114. package/dist/interfaces/abstract-graph.js.map +1 -0
  115. package/dist/interfaces/avl-tree.js +1 -0
  116. package/dist/interfaces/avl-tree.js.map +1 -0
  117. package/dist/interfaces/binary-tree.js +1 -0
  118. package/dist/interfaces/binary-tree.js.map +1 -0
  119. package/dist/interfaces/bst.js +1 -0
  120. package/dist/interfaces/bst.js.map +1 -0
  121. package/dist/interfaces/directed-graph.js +1 -0
  122. package/dist/interfaces/directed-graph.js.map +1 -0
  123. package/dist/interfaces/doubly-linked-list.js +1 -0
  124. package/dist/interfaces/doubly-linked-list.js.map +1 -0
  125. package/dist/interfaces/heap.js +1 -0
  126. package/dist/interfaces/heap.js.map +1 -0
  127. package/dist/interfaces/index.js +1 -0
  128. package/dist/interfaces/index.js.map +1 -0
  129. package/dist/interfaces/navigator.js +1 -0
  130. package/dist/interfaces/navigator.js.map +1 -0
  131. package/dist/interfaces/priority-queue.js +1 -0
  132. package/dist/interfaces/priority-queue.js.map +1 -0
  133. package/dist/interfaces/rb-tree.js +1 -0
  134. package/dist/interfaces/rb-tree.js.map +1 -0
  135. package/dist/interfaces/segment-tree.js +1 -0
  136. package/dist/interfaces/segment-tree.js.map +1 -0
  137. package/dist/interfaces/singly-linked-list.js +1 -0
  138. package/dist/interfaces/singly-linked-list.js.map +1 -0
  139. package/dist/interfaces/tree-multiset.js +1 -0
  140. package/dist/interfaces/tree-multiset.js.map +1 -0
  141. package/dist/interfaces/undirected-graph.js +1 -0
  142. package/dist/interfaces/undirected-graph.js.map +1 -0
  143. package/dist/types/data-structures/abstract-binary-tree.js +1 -0
  144. package/dist/types/data-structures/abstract-binary-tree.js.map +1 -0
  145. package/dist/types/data-structures/abstract-graph.js +1 -0
  146. package/dist/types/data-structures/abstract-graph.js.map +1 -0
  147. package/dist/types/data-structures/avl-tree.js +1 -0
  148. package/dist/types/data-structures/avl-tree.js.map +1 -0
  149. package/dist/types/data-structures/binary-tree.js +1 -0
  150. package/dist/types/data-structures/binary-tree.js.map +1 -0
  151. package/dist/types/data-structures/bst.js +1 -0
  152. package/dist/types/data-structures/bst.js.map +1 -0
  153. package/dist/types/data-structures/directed-graph.js +1 -0
  154. package/dist/types/data-structures/directed-graph.js.map +1 -0
  155. package/dist/types/data-structures/doubly-linked-list.js +1 -0
  156. package/dist/types/data-structures/doubly-linked-list.js.map +1 -0
  157. package/dist/types/data-structures/heap.js +1 -0
  158. package/dist/types/data-structures/heap.js.map +1 -0
  159. package/dist/types/data-structures/index.js +1 -0
  160. package/dist/types/data-structures/index.js.map +1 -0
  161. package/dist/types/data-structures/map-graph.js +1 -0
  162. package/dist/types/data-structures/map-graph.js.map +1 -0
  163. package/dist/types/data-structures/navigator.js +1 -0
  164. package/dist/types/data-structures/navigator.js.map +1 -0
  165. package/dist/types/data-structures/priority-queue.js +1 -0
  166. package/dist/types/data-structures/priority-queue.js.map +1 -0
  167. package/dist/types/data-structures/rb-tree.js +1 -0
  168. package/dist/types/data-structures/rb-tree.js.map +1 -0
  169. package/dist/types/data-structures/segment-tree.js +1 -0
  170. package/dist/types/data-structures/segment-tree.js.map +1 -0
  171. package/dist/types/data-structures/singly-linked-list.js +1 -0
  172. package/dist/types/data-structures/singly-linked-list.js.map +1 -0
  173. package/dist/types/data-structures/tree-multiset.js +1 -0
  174. package/dist/types/data-structures/tree-multiset.js.map +1 -0
  175. package/dist/types/helpers.js +1 -0
  176. package/dist/types/helpers.js.map +1 -0
  177. package/dist/types/index.js +1 -0
  178. package/dist/types/index.js.map +1 -0
  179. package/dist/types/utils/index.js +1 -0
  180. package/dist/types/utils/index.js.map +1 -0
  181. package/dist/types/utils/utils.js +1 -0
  182. package/dist/types/utils/utils.js.map +1 -0
  183. package/dist/types/utils/validate-type.js +1 -0
  184. package/dist/types/utils/validate-type.js.map +1 -0
  185. package/dist/utils/index.js +1 -0
  186. package/dist/utils/index.js.map +1 -0
  187. package/dist/utils/utils.js +1 -0
  188. package/dist/utils/utils.js.map +1 -0
  189. package/package.json +24 -45
@@ -250,36 +250,30 @@ class AbstractBinaryTree {
250
250
  return inserted;
251
251
  }
252
252
  /**
253
- * The `addMany` function adds multiple nodes to a tree data structure and returns an array of the inserted nodes or
254
- * null/undefined values.
255
- * @param {(BinaryTreeNodeId|N)[]} idsOrNodes - An array of BinaryTreeNodeId or N objects. These can be either the ID
256
- * of a binary tree node or the actual node object itself.
257
- * @param {N['val'][]} [data] - Optional array of values to be added to the nodes. If provided, the length of this
258
- * array should be the same as the length of the `idsOrNodes` array.
259
- * @returns The function `addMany` returns an array of values `(N | null | undefined)[]`.
253
+ * The `addMany` function takes an array of binary tree node IDs or nodes, and optionally an array of corresponding data
254
+ * values, and adds them to the binary tree.
255
+ * @param {(BinaryTreeNodeId | null)[] | (N | null)[]} idsOrNodes - An array of BinaryTreeNodeId or BinaryTreeNode
256
+ * objects, or null values.
257
+ * @param {N['val'][]} [data] - The `data` parameter is an optional array of values (`N['val'][]`) that corresponds to
258
+ * the nodes or node IDs being added. It is used to set the value of each node being added. If `data` is not provided,
259
+ * the value of the nodes will be `undefined`.
260
+ * @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values.
260
261
  */
261
262
  addMany(idsOrNodes, data) {
262
- var _a;
263
263
  // TODO not sure addMany not be run multi times
264
264
  const inserted = [];
265
- const map = new Map();
266
- for (const idOrNode of idsOrNodes)
267
- map.set(idOrNode, ((_a = map.get(idOrNode)) !== null && _a !== void 0 ? _a : 0) + 1);
268
265
  for (let i = 0; i < idsOrNodes.length; i++) {
269
266
  const idOrNode = idsOrNodes[i];
270
- if (map.has(idOrNode)) {
271
- if (idOrNode instanceof AbstractBinaryTreeNode) {
272
- inserted.push(this.add(idOrNode.id, idOrNode.val));
273
- continue;
274
- }
275
- if (idOrNode === null) {
276
- inserted.push(this.add(null));
277
- continue;
278
- }
279
- const val = data === null || data === void 0 ? void 0 : data[i];
280
- inserted.push(this.add(idOrNode, val));
281
- map.delete(idOrNode);
267
+ if (idOrNode instanceof AbstractBinaryTreeNode) {
268
+ inserted.push(this.add(idOrNode.id, idOrNode.val));
269
+ continue;
282
270
  }
271
+ if (idOrNode === null) {
272
+ inserted.push(this.add(null));
273
+ continue;
274
+ }
275
+ const val = data === null || data === void 0 ? void 0 : data[i];
276
+ inserted.push(this.add(idOrNode, val));
283
277
  }
284
278
  return inserted;
285
279
  }
@@ -297,16 +291,20 @@ class AbstractBinaryTree {
297
291
  return idsOrNodes.length === this.addMany(idsOrNodes, data).length;
298
292
  }
299
293
  /**
300
- * The `remove` function removes a node from a binary search tree and returns the deleted node along with the parent
301
- * node that needs to be balanced.
294
+ * The `remove` function removes a node from a binary search tree and returns the deleted node along with the parent node
295
+ * that needs to be balanced.
302
296
  * @param {N | BinaryTreeNodeId} nodeOrId - The `nodeOrId` parameter can be either a node object (`N`) or a binary tree
303
297
  * node ID (`BinaryTreeNodeId`).
304
- * @param {boolean} [ignoreCount] - The `ignoreCount` parameter is an optional boolean parameter that determines
305
- * whether to ignore the count of the nodes in the binary tree. If `ignoreCount` is set to `true`, the count of the
306
- * nodes in the binary tree will not be updated after removing a node. If `ignoreCount`
298
+ * @param {boolean} [isUpdateAllLeftSum] - The `isUpdateAllLeftSum` parameter is an optional boolean parameter that
299
+ * determines whether to update the left sum of all nodes in the binary tree after removing a node. If
300
+ * `isUpdateAllLeftSum` is set to `true`, the left sum of all nodes will be updated. If it
307
301
  * @returns The function `remove` returns an array of `BinaryTreeDeletedResult<N>` objects.
308
302
  */
309
- remove(nodeOrId, ignoreCount) {
303
+ remove(nodeOrId, isUpdateAllLeftSum) {
304
+ isUpdateAllLeftSum = isUpdateAllLeftSum === undefined ? true : isUpdateAllLeftSum;
305
+ // TODO may implement update all left sum
306
+ if (isUpdateAllLeftSum) {
307
+ }
310
308
  const bstDeletedResult = [];
311
309
  if (!this.root)
312
310
  return bstDeletedResult;
@@ -541,20 +539,26 @@ class AbstractBinaryTree {
541
539
  return (_a = this.getNodes(nodeProperty, propertyName, true)[0]) !== null && _a !== void 0 ? _a : null;
542
540
  }
543
541
  /**
544
- * The function getPathToRoot takes a node and returns an array of nodes representing the path from the given node to
545
- * the root node.
546
- * @param {N} node - The parameter `node` represents a node in a tree data structure.
542
+ * The function `getPathToRoot` returns an array of nodes representing the path from a given node to the root node, with
543
+ * an option to reverse the order of the nodes.
544
+ * @param {N} node - The `node` parameter represents a node in a tree structure. It is of type `N`, which could be any
545
+ * type that represents a node in your specific implementation.
546
+ * @param {boolean} [isReverse=true] - The `isReverse` parameter is a boolean flag that determines whether the resulting
547
+ * path should be reversed or not. If `isReverse` is set to `true`, the path will be reversed before returning it. If
548
+ * `isReverse` is set to `false` or not provided, the path will
547
549
  * @returns The function `getPathToRoot` returns an array of nodes (`N[]`).
548
550
  */
549
- getPathToRoot(node) {
551
+ getPathToRoot(node, isReverse = true) {
550
552
  // TODO to support get path through passing id
551
553
  const result = [];
552
554
  while (node.parent) {
553
- result.unshift(node);
555
+ // Array.push + Array.reverse is more efficient than Array.unshift
556
+ // TODO may consider using Deque, so far this is not the performance bottleneck
557
+ result.push(node);
554
558
  node = node.parent;
555
559
  }
556
- result.unshift(node);
557
- return result;
560
+ result.push(node);
561
+ return isReverse ? result.reverse() : result;
558
562
  }
559
563
  /**
560
564
  * The `getLeftMost` function returns the leftmost node in a binary tree, starting from a specified node or the root if
@@ -1306,3 +1310,4 @@ class AbstractBinaryTree {
1306
1310
  }
1307
1311
  }
1308
1312
  exports.AbstractBinaryTree = AbstractBinaryTree;
1313
+ //# sourceMappingURL=abstract-binary-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-binary-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/abstract-binary-tree.ts"],"names":[],"mappings":"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"}
@@ -88,14 +88,13 @@ class AVLTree extends bst_1.BST {
88
88
  * @param node - The parameter `node` is an AVLTreeNode object, which represents a node in an AVL tree.
89
89
  */
90
90
  _updateHeight(node) {
91
- if (!node.left && !node.right) // node is a leaf
91
+ if (!node.left && !node.right)
92
92
  node.height = 0;
93
93
  else if (!node.left) {
94
- // node has no left subtree
95
94
  const rightHeight = node.right ? node.right.height : 0;
96
95
  node.height = 1 + rightHeight;
97
96
  }
98
- else if (!node.right) // node has no right subtree
97
+ else if (!node.right)
99
98
  node.height = 1 + node.left.height;
100
99
  else
101
100
  node.height = 1 + Math.max(node.right.height, node.left.height);
@@ -106,31 +105,39 @@ class AVLTree extends bst_1.BST {
106
105
  * @param node - The `node` parameter is an AVLTreeNode object, which represents a node in an AVL tree.
107
106
  */
108
107
  _balancePath(node) {
109
- const path = this.getPathToRoot(node);
110
- for (let i = path.length - 1; i >= 0; i--) {
108
+ const path = this.getPathToRoot(node, false); // first O(log n) + O(log n)
109
+ for (let i = 0; i < path.length; i++) { // second O(log n)
111
110
  const A = path[i];
112
- this._updateHeight(A);
113
- switch (this._balanceFactor(A)) {
111
+ // Update Heights: After inserting a node, backtrack from the insertion point to the root node, updating the height of each node along the way.
112
+ this._updateHeight(A); // first O(1)
113
+ // Check Balance: Simultaneously with height updates, check if each node violates the balance property of an AVL tree.
114
+ // Balance Restoration: If a balance issue is discovered after inserting a node, it requires balance restoration operations. Balance restoration includes four basic cases where rotation operations need to be performed to fix the balance:
115
+ switch (this._balanceFactor(A)) { // second O(1)
114
116
  case -2:
115
117
  if (A && A.left) {
116
- if (this._balanceFactor(A.left) <= 0) {
117
- this._balanceLL(A); // Perform LL rotation
118
+ if (this._balanceFactor(A.left) <= 0) { // second O(1)
119
+ // Left Rotation (LL Rotation): When the inserted node is in the left subtree of the left subtree, causing an imbalance.
120
+ this._balanceLL(A);
118
121
  }
119
122
  else {
120
- this._balanceLR(A); // Perform LR rotation
123
+ // Left-Right Rotation (LR Rotation): When the inserted node is in the right subtree of the left subtree, causing an imbalance.
124
+ this._balanceLR(A);
121
125
  }
122
126
  }
123
127
  break;
124
128
  case +2:
125
129
  if (A && A.right) {
126
130
  if (this._balanceFactor(A.right) >= 0) {
127
- this._balanceRR(A); // Perform RR rotation
131
+ // Right Rotation (RR Rotation): When the inserted node is in the right subtree of the right subtree, causing an imbalance.
132
+ this._balanceRR(A);
128
133
  }
129
134
  else {
130
- this._balanceRL(A); // Perform RL rotation
135
+ // Right-Left Rotation (RL Rotation): When the inserted node is in the left subtree of the right subtree, causing an imbalance.
136
+ this._balanceRL(A);
131
137
  }
132
138
  }
133
139
  }
140
+ // TODO So far, no sure if this is necessary that Recursive Repair: Once rotation operations are executed, it may cause imbalance issues at higher levels of the tree. Therefore, you need to recursively check and repair imbalance problems upwards until you reach the root node.
134
141
  }
135
142
  }
136
143
  /**
@@ -139,7 +146,7 @@ class AVLTree extends bst_1.BST {
139
146
  */
140
147
  _balanceLL(A) {
141
148
  const parentOfA = A.parent;
142
- const B = A.left; // A is left-heavy and B is left-heavy
149
+ const B = A.left;
143
150
  A.parent = B;
144
151
  if (B && B.right) {
145
152
  B.right.parent = A;
@@ -160,8 +167,8 @@ class AVLTree extends bst_1.BST {
160
167
  }
161
168
  }
162
169
  if (B) {
163
- A.left = B.right; // Make T2 the left subtree of A
164
- B.right = A; // Make A the left child of B
170
+ A.left = B.right;
171
+ B.right = A;
165
172
  }
166
173
  this._updateHeight(A);
167
174
  if (B)
@@ -173,10 +180,10 @@ class AVLTree extends bst_1.BST {
173
180
  */
174
181
  _balanceLR(A) {
175
182
  const parentOfA = A.parent;
176
- const B = A.left; // A is left-heavy
183
+ const B = A.left;
177
184
  let C = null;
178
185
  if (B) {
179
- C = B.right; // B is right-heavy
186
+ C = B.right;
180
187
  }
181
188
  if (A)
182
189
  A.parent = C;
@@ -206,13 +213,13 @@ class AVLTree extends bst_1.BST {
206
213
  }
207
214
  }
208
215
  if (C) {
209
- A.left = C.right; // Make T3 the left subtree of A
216
+ A.left = C.right;
210
217
  if (B)
211
- B.right = C.left; // Make T2 the right subtree of B
218
+ B.right = C.left;
212
219
  C.left = B;
213
220
  C.right = A;
214
221
  }
215
- this._updateHeight(A); // Adjust heights
222
+ this._updateHeight(A);
216
223
  B && this._updateHeight(B);
217
224
  C && this._updateHeight(C);
218
225
  }
@@ -222,7 +229,7 @@ class AVLTree extends bst_1.BST {
222
229
  */
223
230
  _balanceRR(A) {
224
231
  const parentOfA = A.parent;
225
- const B = A.right; // A is right-heavy and B is right-heavy
232
+ const B = A.right;
226
233
  A.parent = B;
227
234
  if (B) {
228
235
  if (B.left) {
@@ -245,7 +252,7 @@ class AVLTree extends bst_1.BST {
245
252
  }
246
253
  }
247
254
  if (B) {
248
- A.right = B.left; // Make T2 the right subtree of A
255
+ A.right = B.left;
249
256
  B.left = A;
250
257
  }
251
258
  this._updateHeight(A);
@@ -257,10 +264,10 @@ class AVLTree extends bst_1.BST {
257
264
  */
258
265
  _balanceRL(A) {
259
266
  const parentOfA = A.parent;
260
- const B = A.right; // A is right-heavy
267
+ const B = A.right;
261
268
  let C = null;
262
269
  if (B) {
263
- C = B.left; // B is left-heavy
270
+ C = B.left;
264
271
  }
265
272
  A.parent = C;
266
273
  if (B)
@@ -289,16 +296,17 @@ class AVLTree extends bst_1.BST {
289
296
  }
290
297
  }
291
298
  if (C)
292
- A.right = C.left; // Make T2 the right subtree of A
299
+ A.right = C.left;
293
300
  if (B && C)
294
- B.left = C.right; // Make T3 the left subtree of B
301
+ B.left = C.right;
295
302
  if (C)
296
303
  C.left = A;
297
304
  if (C)
298
305
  C.right = B;
299
- this._updateHeight(A); // Adjust heights
306
+ this._updateHeight(A);
300
307
  B && this._updateHeight(B);
301
308
  C && this._updateHeight(C);
302
309
  }
303
310
  }
304
311
  exports.AVLTree = AVLTree;
312
+ //# sourceMappingURL=avl-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avl-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/avl-tree.ts"],"names":[],"mappings":"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"}
@@ -4,3 +4,4 @@ exports.BTree = void 0;
4
4
  class BTree {
5
5
  }
6
6
  exports.BTree = BTree;
7
+ //# sourceMappingURL=b-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/b-tree.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;CAEjB;AAFD,sBAEC"}
@@ -71,3 +71,4 @@ class BinaryIndexedTree {
71
71
  }
72
72
  }
73
73
  exports.BinaryIndexedTree = BinaryIndexedTree;
74
+ //# sourceMappingURL=binary-indexed-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-indexed-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/binary-indexed-tree.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,MAAa,iBAAiB;IAE5B;;;;;OAKG;IACH,YAAY,CAAS;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAID,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,CAAS;QACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,CAAS,EAAE,KAAa;QAC7B,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;YAC1B,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClC;IACH,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,CAAS;QACpB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,EAAE;YACZ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,KAAa,EAAE,GAAW;QACpC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9D,MAAM,qBAAqB,CAAC;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAES,WAAW,CAAC,KAAe;QACnC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;CACF;AAtED,8CAsEC"}
@@ -38,3 +38,4 @@ class BinaryTree extends abstract_binary_tree_1.AbstractBinaryTree {
38
38
  }
39
39
  }
40
40
  exports.BinaryTree = BinaryTree;
41
+ //# sourceMappingURL=binary-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/binary-tree.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAGH,iEAAkF;AAGlF,MAAa,cAAgG,SAAQ,6CAAmC;IACtJ,YAAY,EAAoB,EAAE,GAAO;QACvC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,wCAIC;AAED,MAAa,UAAmE,SAAQ,yCAAqB;IAE3G;;;;;OAKG;IACH,YAAY,OAA2B;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,EAAoB,EAAE,GAAc;QAC7C,OAAO,IAAI,cAAc,CAAc,EAAE,EAAE,GAAG,CAAM,CAAC;IACvD,CAAC;CACF;AAvBD,gCAuBC"}
@@ -28,15 +28,26 @@ export declare class BST<N extends BSTNode<N['val'], N> = BSTNode> extends Binar
28
28
  */
29
29
  createNode(id: BinaryTreeNodeId, val?: N['val']): N;
30
30
  /**
31
- * The `add` function adds a new node to a binary tree, ensuring that duplicates are not accepted.
32
- * @param {BinaryTreeNodeId} id - The `id` parameter is the identifier of the binary tree node that we want to add. It
33
- * is of type `BinaryTreeNodeId`.
34
- * @param [val] - The `val` parameter is an optional value that can be assigned to the node being added. It represents
35
- * the value associated with the node.
36
- * @returns The function `add` returns the inserted node (`inserted`) if it was successfully added to the binary tree.
37
- * If the node was not added (e.g., due to a duplicate ID), it returns `null` or `undefined`.
31
+ * The `add` function adds a new node to a binary search tree, either by creating a new node or by updating an existing
32
+ * node with the same ID.
33
+ * @param {BinaryTreeNodeId | N | null} idOrNode - The `idOrNode` parameter can be either a `BinaryTreeNodeId` or a `N`
34
+ * (which represents a binary tree node) or `null`.
35
+ * @param [val] - The `val` parameter is an optional value that can be assigned to the `val` property of the new node
36
+ * being added to the binary search tree.
37
+ * @returns The function `add` returns the inserted node (`inserted`) which can be of type `N`, `null`, or `undefined`.
38
38
  */
39
- add(id: BinaryTreeNodeId, val?: N['val']): N | null | undefined;
39
+ add(idOrNode: BinaryTreeNodeId | N | null, val?: N['val']): N | null | undefined;
40
+ /**
41
+ * The `addMany` function overrides the base class method to add multiple nodes to a binary search tree in a balanced
42
+ * manner.
43
+ * @param {[BinaryTreeNodeId | N , N['val']][]} idsOrNodes - The `idsOrNodes` parameter in the `addMany` function is an array of
44
+ * `BinaryTreeNodeId` or `N` (node) objects, or `null` values. It represents the nodes or node IDs that need to be added
45
+ * to the binary search tree.
46
+ * @param {N['val'][]} data - The values of tree nodes
47
+ * @param {boolean} isBalanceAdd - If true the nodes will be balance inserted in binary search method.
48
+ * @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values.
49
+ */
50
+ addMany(idsOrNodes: (BinaryTreeNodeId | null)[] | (N | null)[], data?: N['val'][], isBalanceAdd?: boolean): (N | null | undefined)[];
40
51
  /**
41
52
  * The function returns the first node in a binary tree that matches the given property name and value.
42
53
  * @param {BinaryTreeNodeId | N} nodeProperty - The `nodeProperty` parameter can be either a `BinaryTreeNodeId` or a
@@ -36,18 +36,27 @@ class BST extends binary_tree_1.BinaryTree {
36
36
  return new BSTNode(id, val);
37
37
  }
38
38
  /**
39
- * The `add` function adds a new node to a binary tree, ensuring that duplicates are not accepted.
40
- * @param {BinaryTreeNodeId} id - The `id` parameter is the identifier of the binary tree node that we want to add. It
41
- * is of type `BinaryTreeNodeId`.
42
- * @param [val] - The `val` parameter is an optional value that can be assigned to the node being added. It represents
43
- * the value associated with the node.
44
- * @returns The function `add` returns the inserted node (`inserted`) if it was successfully added to the binary tree.
45
- * If the node was not added (e.g., due to a duplicate ID), it returns `null` or `undefined`.
39
+ * The `add` function adds a new node to a binary search tree, either by creating a new node or by updating an existing
40
+ * node with the same ID.
41
+ * @param {BinaryTreeNodeId | N | null} idOrNode - The `idOrNode` parameter can be either a `BinaryTreeNodeId` or a `N`
42
+ * (which represents a binary tree node) or `null`.
43
+ * @param [val] - The `val` parameter is an optional value that can be assigned to the `val` property of the new node
44
+ * being added to the binary search tree.
45
+ * @returns The function `add` returns the inserted node (`inserted`) which can be of type `N`, `null`, or `undefined`.
46
46
  */
47
- add(id, val) {
47
+ add(idOrNode, val) {
48
48
  // TODO support node as a param
49
49
  let inserted = null;
50
- const newNode = this.createNode(id, val);
50
+ let newNode = null;
51
+ if (idOrNode instanceof BSTNode) {
52
+ newNode = idOrNode;
53
+ }
54
+ else if (typeof idOrNode === 'number') {
55
+ newNode = this.createNode(idOrNode, val);
56
+ }
57
+ else if (idOrNode === null) {
58
+ newNode = null;
59
+ }
51
60
  if (this.root === null) {
52
61
  this._setRoot(newNode);
53
62
  this._setSize(this.size + 1);
@@ -58,7 +67,7 @@ class BST extends binary_tree_1.BinaryTree {
58
67
  let traversing = true;
59
68
  while (traversing) {
60
69
  if (cur !== null && newNode !== null) {
61
- if (this._compare(cur.id, id) === types_1.CP.eq) {
70
+ if (this._compare(cur.id, newNode.id) === types_1.CP.eq) {
62
71
  if (newNode) {
63
72
  cur.val = newNode.val;
64
73
  }
@@ -66,7 +75,7 @@ class BST extends binary_tree_1.BinaryTree {
66
75
  traversing = false;
67
76
  inserted = cur;
68
77
  }
69
- else if (this._compare(cur.id, id) === types_1.CP.gt) {
78
+ else if (this._compare(cur.id, newNode.id) === types_1.CP.gt) {
70
79
  // Traverse left of the node
71
80
  if (cur.left === undefined) {
72
81
  if (newNode) {
@@ -84,7 +93,7 @@ class BST extends binary_tree_1.BinaryTree {
84
93
  cur = cur.left;
85
94
  }
86
95
  }
87
- else if (this._compare(cur.id, id) === types_1.CP.lt) {
96
+ else if (this._compare(cur.id, newNode.id) === types_1.CP.lt) {
88
97
  // Traverse right of the node
89
98
  if (cur.right === undefined) {
90
99
  if (newNode) {
@@ -110,6 +119,84 @@ class BST extends binary_tree_1.BinaryTree {
110
119
  }
111
120
  return inserted;
112
121
  }
122
+ /**
123
+ * The `addMany` function overrides the base class method to add multiple nodes to a binary search tree in a balanced
124
+ * manner.
125
+ * @param {[BinaryTreeNodeId | N , N['val']][]} idsOrNodes - The `idsOrNodes` parameter in the `addMany` function is an array of
126
+ * `BinaryTreeNodeId` or `N` (node) objects, or `null` values. It represents the nodes or node IDs that need to be added
127
+ * to the binary search tree.
128
+ * @param {N['val'][]} data - The values of tree nodes
129
+ * @param {boolean} isBalanceAdd - If true the nodes will be balance inserted in binary search method.
130
+ * @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values.
131
+ */
132
+ addMany(idsOrNodes, data, isBalanceAdd = false) {
133
+ function hasNoNull(arr) {
134
+ return arr.indexOf(null) === -1;
135
+ }
136
+ if (!isBalanceAdd || !hasNoNull(idsOrNodes)) {
137
+ return super.addMany(idsOrNodes, data);
138
+ }
139
+ const inserted = [];
140
+ const combinedArr = idsOrNodes.map((value, index) => [value, data === null || data === void 0 ? void 0 : data[index]]);
141
+ let sorted = [];
142
+ function isNodeOrNullTuple(arr) {
143
+ for (const [idOrNode] of arr)
144
+ if (idOrNode instanceof BSTNode)
145
+ return true;
146
+ return false;
147
+ }
148
+ function isBinaryTreeIdOrNullTuple(arr) {
149
+ for (const [idOrNode] of arr)
150
+ if (typeof idOrNode === 'number')
151
+ return true;
152
+ return false;
153
+ }
154
+ let sortedIdsOrNodes = [], sortedData = [];
155
+ if (isNodeOrNullTuple(combinedArr)) {
156
+ sorted = combinedArr.sort((a, b) => a[0].id - b[0].id);
157
+ }
158
+ else if (isBinaryTreeIdOrNullTuple(combinedArr)) {
159
+ sorted = combinedArr.sort((a, b) => a[0] - b[0]);
160
+ }
161
+ else {
162
+ throw new Error('Invalid input idsOrNodes');
163
+ }
164
+ sortedIdsOrNodes = sorted.map(([idOrNode,]) => idOrNode);
165
+ sortedData = sorted.map(([, val]) => val);
166
+ const recursive = (arr, data) => {
167
+ if (arr.length === 0)
168
+ return;
169
+ const mid = Math.floor((arr.length - 1) / 2);
170
+ const newNode = this.add(arr[mid], data === null || data === void 0 ? void 0 : data[mid]);
171
+ inserted.push(newNode);
172
+ recursive(arr.slice(0, mid), data === null || data === void 0 ? void 0 : data.slice(0, mid));
173
+ recursive(arr.slice(mid + 1), data === null || data === void 0 ? void 0 : data.slice(mid + 1));
174
+ };
175
+ const iterative = () => {
176
+ const n = sorted.length;
177
+ const stack = [[0, n - 1]];
178
+ while (stack.length > 0) {
179
+ const popped = stack.pop();
180
+ if (popped) {
181
+ const [l, r] = popped;
182
+ if (l <= r) {
183
+ const m = l + Math.floor((r - l) / 2);
184
+ const newNode = this.add(sortedIdsOrNodes[m], sortedData === null || sortedData === void 0 ? void 0 : sortedData[m]);
185
+ inserted.push(newNode);
186
+ stack.push([m + 1, r]);
187
+ stack.push([l, m - 1]);
188
+ }
189
+ }
190
+ }
191
+ };
192
+ if (this.loopType === types_1.LoopType.RECURSIVE) {
193
+ recursive(sortedIdsOrNodes, sortedData);
194
+ }
195
+ else {
196
+ iterative();
197
+ }
198
+ return inserted;
199
+ }
113
200
  /**
114
201
  * The function returns the first node in a binary tree that matches the given property name and value.
115
202
  * @param {BinaryTreeNodeId | N} nodeProperty - The `nodeProperty` parameter can be either a `BinaryTreeNodeId` or a
@@ -150,8 +237,7 @@ class BST extends binary_tree_1.BinaryTree {
150
237
  * is set to `true`, the function will return an array with only one node (if
151
238
  * @returns an array of nodes (type N).
152
239
  */
153
- getNodes(nodeProperty, propertyName, onlyOne) {
154
- propertyName = propertyName !== null && propertyName !== void 0 ? propertyName : 'id';
240
+ getNodes(nodeProperty, propertyName = 'id', onlyOne) {
155
241
  if (!this.root)
156
242
  return [];
157
243
  const result = [];
@@ -467,3 +553,4 @@ class BST extends binary_tree_1.BinaryTree {
467
553
  }
468
554
  }
469
555
  exports.BST = BST;
556
+ //# sourceMappingURL=bst.js.map