data-structure-typed 1.42.5 → 1.42.7

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 (52) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/CONTRIBUTING.md +66 -5
  3. package/README.md +218 -126
  4. package/benchmark/report.html +12 -12
  5. package/benchmark/report.json +101 -101
  6. package/dist/cjs/src/data-structures/binary-tree/avl-tree.d.ts +5 -5
  7. package/dist/cjs/src/data-structures/binary-tree/avl-tree.js +19 -14
  8. package/dist/cjs/src/data-structures/binary-tree/avl-tree.js.map +1 -1
  9. package/dist/cjs/src/data-structures/binary-tree/binary-tree.d.ts +108 -60
  10. package/dist/cjs/src/data-structures/binary-tree/binary-tree.js +189 -89
  11. package/dist/cjs/src/data-structures/binary-tree/binary-tree.js.map +1 -1
  12. package/dist/cjs/src/data-structures/binary-tree/bst.d.ts +30 -8
  13. package/dist/cjs/src/data-structures/binary-tree/bst.js +77 -28
  14. package/dist/cjs/src/data-structures/binary-tree/bst.js.map +1 -1
  15. package/dist/cjs/src/data-structures/binary-tree/rb-tree.d.ts +35 -28
  16. package/dist/cjs/src/data-structures/binary-tree/rb-tree.js +44 -45
  17. package/dist/cjs/src/data-structures/binary-tree/rb-tree.js.map +1 -1
  18. package/dist/cjs/src/data-structures/binary-tree/tree-multimap.d.ts +7 -12
  19. package/dist/cjs/src/data-structures/binary-tree/tree-multimap.js +38 -37
  20. package/dist/cjs/src/data-structures/binary-tree/tree-multimap.js.map +1 -1
  21. package/dist/cjs/src/interfaces/binary-tree.d.ts +2 -2
  22. package/dist/cjs/src/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  23. package/dist/cjs/src/types/data-structures/binary-tree/binary-tree.js +6 -0
  24. package/dist/cjs/src/types/data-structures/binary-tree/binary-tree.js.map +1 -1
  25. package/dist/cjs/src/types/data-structures/binary-tree/rb-tree.d.ts +2 -2
  26. package/dist/mjs/src/data-structures/binary-tree/avl-tree.d.ts +5 -5
  27. package/dist/mjs/src/data-structures/binary-tree/avl-tree.js +19 -14
  28. package/dist/mjs/src/data-structures/binary-tree/binary-tree.d.ts +108 -60
  29. package/dist/mjs/src/data-structures/binary-tree/binary-tree.js +191 -89
  30. package/dist/mjs/src/data-structures/binary-tree/bst.d.ts +30 -8
  31. package/dist/mjs/src/data-structures/binary-tree/bst.js +78 -27
  32. package/dist/mjs/src/data-structures/binary-tree/rb-tree.d.ts +35 -28
  33. package/dist/mjs/src/data-structures/binary-tree/rb-tree.js +43 -45
  34. package/dist/mjs/src/data-structures/binary-tree/tree-multimap.d.ts +7 -12
  35. package/dist/mjs/src/data-structures/binary-tree/tree-multimap.js +38 -37
  36. package/dist/mjs/src/interfaces/binary-tree.d.ts +2 -2
  37. package/dist/mjs/src/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  38. package/dist/mjs/src/types/data-structures/binary-tree/binary-tree.js +6 -0
  39. package/dist/mjs/src/types/data-structures/binary-tree/rb-tree.d.ts +2 -2
  40. package/dist/umd/data-structure-typed.min.js +1 -1
  41. package/dist/umd/data-structure-typed.min.js.map +1 -1
  42. package/package.json +5 -5
  43. package/src/data-structures/binary-tree/avl-tree.ts +24 -18
  44. package/src/data-structures/binary-tree/binary-tree.ts +248 -142
  45. package/src/data-structures/binary-tree/bst.ts +88 -38
  46. package/src/data-structures/binary-tree/rb-tree.ts +52 -58
  47. package/src/data-structures/binary-tree/tree-multimap.ts +50 -54
  48. package/src/interfaces/binary-tree.ts +2 -2
  49. package/src/types/data-structures/binary-tree/binary-tree.ts +7 -1
  50. package/src/types/data-structures/binary-tree/rb-tree.ts +2 -2
  51. package/test/performance/reportor.ts +2 -2
  52. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +9 -9
@@ -6,7 +6,7 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import type { BTNKey, TreeMultimapNodeNested, TreeMultimapOptions } from '../../types';
9
- import { BinaryTreeDeletedResult, BTNCallback, IterationType } from '../../types';
9
+ import { BiTreeDeleteResult, BTNCallback, IterationType } from '../../types';
10
10
  import { IBinaryTree } from '../../interfaces';
11
11
  import { AVLTree, AVLTreeNode } from './avl-tree';
12
12
  export declare class TreeMultimapNode<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNodeNested<V>> extends AVLTreeNode<V, N> {
@@ -68,7 +68,7 @@ export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = Tr
68
68
  * be added as a child.
69
69
  * @returns The method `_addTo` returns either the `parent.left`, `parent.right`, or `undefined`.
70
70
  */
71
- _addTo(newNode: N | undefined, parent: N): N | undefined;
71
+ protected _addTo(newNode: N | undefined, parent: BTNKey | N | undefined): N | undefined;
72
72
  /**
73
73
  * The `addMany` function adds multiple keys or nodes to a TreeMultimap and returns an array of the
74
74
  * inserted nodes.
@@ -79,7 +79,7 @@ export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = Tr
79
79
  * each key or node.
80
80
  * @returns The function `addMany` returns an array of `N`, `undefined`, or `undefined` values.
81
81
  */
82
- addMany(keysOrNodes: (BTNKey | undefined)[] | (N | undefined)[], data?: V[]): (N | undefined)[];
82
+ addMany(keysOrNodes: (BTNKey | N | undefined)[], data?: V[]): (N | undefined)[];
83
83
  /**
84
84
  * The `perfectlyBalance` function in TypeScript takes a sorted array of nodes and builds a balanced
85
85
  * binary search tree using either a recursive or iterative approach.
@@ -98,14 +98,14 @@ export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = Tr
98
98
  * @param callback - The `callback` parameter is a function that takes a node as input and returns a
99
99
  * value. This value is compared with the `identifier` parameter to determine if the node should be
100
100
  * included in the result. The `callback` parameter has a default value of
101
- * `this.defaultOneParamCallback`
101
+ * `this._defaultOneParamCallback`
102
102
  * @param [ignoreCount=false] - A boolean flag indicating whether to ignore the count of the node
103
103
  * being deleted. If set to true, the count of the node will not be considered and the node will be
104
104
  * deleted regardless of its count. If set to false (default), the count of the node will be
105
105
  * decremented by 1 and
106
- * @returns The method `delete` returns an array of `BinaryTreeDeletedResult<N>` objects.
106
+ * @returns The method `delete` returns an array of `BiTreeDeleteResult<N>` objects.
107
107
  */
108
- delete<C extends BTNCallback<N>>(identifier: ReturnType<C>, callback?: C, ignoreCount?: boolean): BinaryTreeDeletedResult<N>[];
108
+ delete<C extends BTNCallback<N>>(identifier: ReturnType<C>, callback?: C, ignoreCount?: boolean): BiTreeDeleteResult<N>[];
109
109
  /**
110
110
  * The clear() function clears the contents of a data structure and sets the count to zero.
111
111
  */
@@ -117,10 +117,5 @@ export declare class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = Tr
117
117
  * from `srcNode` will be swapped into.
118
118
  * @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
119
119
  */
120
- protected _swap(srcNode: N, destNode: N): N;
121
- /**
122
- * The function sets the value of the "_count" property.
123
- * @param {number} v - number
124
- */
125
- protected _setCount(v: number): void;
120
+ protected _swap(srcNode: BTNKey | N | undefined, destNode: BTNKey | N | undefined): N | undefined;
126
121
  }
@@ -79,7 +79,8 @@ class TreeMultimap extends avl_tree_1.AVLTree {
79
79
  if (!this.root) {
80
80
  this._setRoot(newNode);
81
81
  this._size = this.size + 1;
82
- newNode && this._setCount(this.count + newNode.count);
82
+ if (newNode)
83
+ this._count += newNode.count;
83
84
  inserted = this.root;
84
85
  }
85
86
  else {
@@ -91,7 +92,7 @@ class TreeMultimap extends avl_tree_1.AVLTree {
91
92
  if (this._compare(cur.key, newNode.key) === types_1.CP.eq) {
92
93
  cur.value = newNode.value;
93
94
  cur.count += newNode.count;
94
- this._setCount(this.count + newNode.count);
95
+ this._count += newNode.count;
95
96
  traversing = false;
96
97
  inserted = cur;
97
98
  }
@@ -101,7 +102,7 @@ class TreeMultimap extends avl_tree_1.AVLTree {
101
102
  //Add to the left of the current node
102
103
  cur.left = newNode;
103
104
  this._size = this.size + 1;
104
- this._setCount(this.count + newNode.count);
105
+ this._count += newNode.count;
105
106
  traversing = false;
106
107
  inserted = cur.left;
107
108
  }
@@ -117,7 +118,7 @@ class TreeMultimap extends avl_tree_1.AVLTree {
117
118
  //Add to the right of the current node
118
119
  cur.right = newNode;
119
120
  this._size = this.size + 1;
120
- this._setCount(this.count + newNode.count);
121
+ this._count += newNode.count;
121
122
  traversing = false;
122
123
  inserted = cur.right;
123
124
  }
@@ -150,12 +151,13 @@ class TreeMultimap extends avl_tree_1.AVLTree {
150
151
  * @returns The method `_addTo` returns either the `parent.left`, `parent.right`, or `undefined`.
151
152
  */
152
153
  _addTo(newNode, parent) {
154
+ parent = this.ensureNotKey(parent);
153
155
  if (parent) {
154
156
  if (parent.left === undefined) {
155
157
  parent.left = newNode;
156
158
  if (newNode !== undefined) {
157
159
  this._size = this.size + 1;
158
- this._setCount(this.count + newNode.count);
160
+ this._count += newNode.count;
159
161
  }
160
162
  return parent.left;
161
163
  }
@@ -163,7 +165,7 @@ class TreeMultimap extends avl_tree_1.AVLTree {
163
165
  parent.right = newNode;
164
166
  if (newNode !== undefined) {
165
167
  this._size = this.size + 1;
166
- this._setCount(this.count + newNode.count);
168
+ this._count += newNode.count;
167
169
  }
168
170
  return parent.right;
169
171
  }
@@ -254,25 +256,25 @@ class TreeMultimap extends avl_tree_1.AVLTree {
254
256
  * @param callback - The `callback` parameter is a function that takes a node as input and returns a
255
257
  * value. This value is compared with the `identifier` parameter to determine if the node should be
256
258
  * included in the result. The `callback` parameter has a default value of
257
- * `this.defaultOneParamCallback`
259
+ * `this._defaultOneParamCallback`
258
260
  * @param [ignoreCount=false] - A boolean flag indicating whether to ignore the count of the node
259
261
  * being deleted. If set to true, the count of the node will not be considered and the node will be
260
262
  * deleted regardless of its count. If set to false (default), the count of the node will be
261
263
  * decremented by 1 and
262
- * @returns The method `delete` returns an array of `BinaryTreeDeletedResult<N>` objects.
264
+ * @returns The method `delete` returns an array of `BiTreeDeleteResult<N>` objects.
263
265
  */
264
- delete(identifier, callback = this.defaultOneParamCallback, ignoreCount = false) {
265
- const bstDeletedResult = [];
266
+ delete(identifier, callback = this._defaultOneParamCallback, ignoreCount = false) {
267
+ const deletedResult = [];
266
268
  if (!this.root)
267
- return bstDeletedResult;
269
+ return deletedResult;
268
270
  const curr = this.getNode(identifier, callback) ?? undefined;
269
271
  if (!curr)
270
- return bstDeletedResult;
272
+ return deletedResult;
271
273
  const parent = curr?.parent ? curr.parent : undefined;
272
274
  let needBalanced = undefined, orgCurrent = curr;
273
275
  if (curr.count > 1 && !ignoreCount) {
274
276
  curr.count--;
275
- this._setCount(this.count - 1);
277
+ this._count--;
276
278
  }
277
279
  else {
278
280
  if (!curr.left) {
@@ -309,20 +311,21 @@ class TreeMultimap extends avl_tree_1.AVLTree {
309
311
  }
310
312
  this._size = this.size - 1;
311
313
  // TODO How to handle when the count of target node is lesser than current node's count
312
- this._setCount(this.count - orgCurrent.count);
314
+ if (orgCurrent)
315
+ this._count -= orgCurrent.count;
313
316
  }
314
- bstDeletedResult.push({ deleted: orgCurrent, needBalanced });
317
+ deletedResult.push({ deleted: orgCurrent, needBalanced });
315
318
  if (needBalanced) {
316
319
  this._balancePath(needBalanced);
317
320
  }
318
- return bstDeletedResult;
321
+ return deletedResult;
319
322
  }
320
323
  /**
321
324
  * The clear() function clears the contents of a data structure and sets the count to zero.
322
325
  */
323
326
  clear() {
324
327
  super.clear();
325
- this._setCount(0);
328
+ this._count = 0;
326
329
  }
327
330
  /**
328
331
  * The function swaps the values of two nodes in a binary tree.
@@ -332,27 +335,25 @@ class TreeMultimap extends avl_tree_1.AVLTree {
332
335
  * @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
333
336
  */
334
337
  _swap(srcNode, destNode) {
335
- const { key, value, count, height } = destNode;
336
- const tempNode = this.createNode(key, value, count);
337
- if (tempNode) {
338
- tempNode.height = height;
339
- destNode.key = srcNode.key;
340
- destNode.value = srcNode.value;
341
- destNode.count = srcNode.count;
342
- destNode.height = srcNode.height;
343
- srcNode.key = tempNode.key;
344
- srcNode.value = tempNode.value;
345
- srcNode.count = tempNode.count;
346
- srcNode.height = tempNode.height;
338
+ srcNode = this.ensureNotKey(srcNode);
339
+ destNode = this.ensureNotKey(destNode);
340
+ if (srcNode && destNode) {
341
+ const { key, value, count, height } = destNode;
342
+ const tempNode = this.createNode(key, value, count);
343
+ if (tempNode) {
344
+ tempNode.height = height;
345
+ destNode.key = srcNode.key;
346
+ destNode.value = srcNode.value;
347
+ destNode.count = srcNode.count;
348
+ destNode.height = srcNode.height;
349
+ srcNode.key = tempNode.key;
350
+ srcNode.value = tempNode.value;
351
+ srcNode.count = tempNode.count;
352
+ srcNode.height = tempNode.height;
353
+ }
354
+ return destNode;
347
355
  }
348
- return destNode;
349
- }
350
- /**
351
- * The function sets the value of the "_count" property.
352
- * @param {number} v - number
353
- */
354
- _setCount(v) {
355
- this._count = v;
356
+ return undefined;
356
357
  }
357
358
  }
358
359
  exports.TreeMultimap = TreeMultimap;
@@ -1,7 +1,7 @@
1
1
  import { BinaryTreeNode } from '../data-structures';
2
- import { BinaryTreeDeletedResult, BinaryTreeNodeNested, BTNCallback, BTNKey } from '../types';
2
+ import { BiTreeDeleteResult, BinaryTreeNodeNested, BTNCallback, BTNKey } from '../types';
3
3
  export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>> {
4
4
  createNode(key: BTNKey, value?: N['value']): N;
5
5
  add(keyOrNode: BTNKey | N | null, value?: N['value']): N | null | undefined;
6
- delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null, callback: C): BinaryTreeDeletedResult<N>[];
6
+ delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null, callback: C): BiTreeDeleteResult<N>[];
7
7
  }
@@ -19,7 +19,7 @@ export declare enum FamilyPosition {
19
19
  MAL_NODE = "MAL_NODE"
20
20
  }
21
21
  export type BTNKey = number;
22
- export type BinaryTreeDeletedResult<N> = {
22
+ export type BiTreeDeleteResult<N> = {
23
23
  deleted: N | null | undefined;
24
24
  needBalanced: N | null | undefined;
25
25
  };
@@ -22,3 +22,9 @@ var FamilyPosition;
22
22
  FamilyPosition["ISOLATED"] = "ISOLATED";
23
23
  FamilyPosition["MAL_NODE"] = "MAL_NODE";
24
24
  })(FamilyPosition || (exports.FamilyPosition = FamilyPosition = {}));
25
+ //
26
+ // export type BTNIdentifierOrNU<N> = BTNKey | N | null | undefined;
27
+ //
28
+ // export type BTNIdentifierOrU<N> = BTNKey | N | undefined;
29
+ //
30
+ // export type BTNOrNU<N> = N | null | undefined;
@@ -1,8 +1,8 @@
1
- import { RBTreeNode } from '../../../data-structures';
1
+ import { RedBlackTreeNode } from '../../../data-structures';
2
2
  import { BSTOptions } from "./bst";
3
3
  export declare enum RBTNColor {
4
4
  RED = 1,
5
5
  BLACK = 0
6
6
  }
7
- export type RBTreeNodeNested<T> = RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
7
+ export type RedBlackTreeNodeNested<T> = RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
8
8
  export type RBTreeOptions = BSTOptions & {};