tree-multimap-typed 2.4.5 → 2.5.1

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 (85) hide show
  1. package/dist/types/data-structures/base/index.d.ts +1 -0
  2. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  3. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  4. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  5. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +380 -51
  6. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +487 -147
  7. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +956 -80
  8. package/dist/types/data-structures/binary-tree/bst.d.ts +816 -29
  9. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +610 -31
  10. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +326 -135
  11. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3781 -6
  12. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3607 -201
  13. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2874 -65
  14. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3528 -6
  15. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  16. package/dist/types/data-structures/graph/directed-graph.d.ts +429 -47
  17. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  18. package/dist/types/data-structures/graph/undirected-graph.d.ts +393 -59
  19. package/dist/types/data-structures/hash/hash-map.d.ts +473 -89
  20. package/dist/types/data-structures/heap/heap.d.ts +581 -99
  21. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  22. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  23. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +646 -47
  24. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +596 -68
  25. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +793 -12
  26. package/dist/types/data-structures/matrix/matrix.d.ts +499 -0
  27. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  28. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  29. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  30. package/dist/types/data-structures/queue/deque.d.ts +593 -71
  31. package/dist/types/data-structures/queue/queue.d.ts +463 -42
  32. package/dist/types/data-structures/stack/stack.d.ts +384 -32
  33. package/dist/types/data-structures/trie/trie.d.ts +470 -48
  34. package/dist/types/interfaces/graph.d.ts +1 -1
  35. package/dist/types/types/common.d.ts +2 -2
  36. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  37. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  38. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  39. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  40. package/dist/types/types/utils/validate-type.d.ts +4 -4
  41. package/dist/umd/tree-multimap-typed.js +24506 -2895
  42. package/dist/umd/tree-multimap-typed.js.map +1 -1
  43. package/dist/umd/tree-multimap-typed.min.js +10 -4
  44. package/dist/umd/tree-multimap-typed.min.js.map +1 -1
  45. package/package.json +2 -2
  46. package/src/data-structures/base/index.ts +1 -0
  47. package/src/data-structures/base/iterable-element-base.ts +4 -5
  48. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  49. package/src/data-structures/base/linear-base.ts +3 -3
  50. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  51. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  52. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  53. package/src/data-structures/binary-tree/bst.ts +840 -35
  54. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  55. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  56. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  57. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  58. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  59. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  60. package/src/data-structures/graph/abstract-graph.ts +4 -4
  61. package/src/data-structures/graph/directed-graph.ts +429 -47
  62. package/src/data-structures/graph/map-graph.ts +59 -1
  63. package/src/data-structures/graph/undirected-graph.ts +393 -59
  64. package/src/data-structures/hash/hash-map.ts +476 -92
  65. package/src/data-structures/heap/heap.ts +581 -99
  66. package/src/data-structures/heap/max-heap.ts +46 -0
  67. package/src/data-structures/heap/min-heap.ts +59 -0
  68. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  69. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  70. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  71. package/src/data-structures/matrix/matrix.ts +584 -12
  72. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  73. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  74. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  75. package/src/data-structures/queue/deque.ts +592 -70
  76. package/src/data-structures/queue/queue.ts +463 -42
  77. package/src/data-structures/stack/stack.ts +384 -32
  78. package/src/data-structures/trie/trie.ts +470 -48
  79. package/src/interfaces/graph.ts +1 -1
  80. package/src/types/common.ts +2 -2
  81. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  82. package/src/types/data-structures/heap/heap.ts +1 -0
  83. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  84. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  85. package/src/types/utils/validate-type.ts +4 -4
@@ -1,2 +1,3 @@
1
1
  export * from './iterable-entry-base';
2
2
  export * from './iterable-element-base';
3
+ export * from './linear-base';
@@ -27,7 +27,7 @@ export declare abstract class IterableElementBase<E, R> implements Iterable<E> {
27
27
  * @remarks
28
28
  * Time O(1), Space O(1).
29
29
  */
30
- protected readonly _toElementFn?: (rawElement: R) => E;
30
+ protected _toElementFn?: (rawElement: R) => E;
31
31
  /**
32
32
  * Exposes the current `toElementFn`, if configured.
33
33
  *
@@ -17,7 +17,7 @@ export declare abstract class IterableEntryBase<K = any, V = any> {
17
17
  * @returns Iterator of `[K, V]`.
18
18
  * @remarks Time O(n) to iterate, Space O(1)
19
19
  */
20
- [Symbol.iterator](...args: any[]): IterableIterator<[K, V]>;
20
+ [Symbol.iterator](...args: unknown[]): IterableIterator<[K, V]>;
21
21
  /**
22
22
  * Iterate over `[key, value]` pairs (may yield `undefined` values).
23
23
  * @returns Iterator of `[K, V | undefined]`.
@@ -43,7 +43,7 @@ export declare abstract class IterableEntryBase<K = any, V = any> {
43
43
  * @returns `true` if all pass; otherwise `false`.
44
44
  * @remarks Time O(n), Space O(1)
45
45
  */
46
- every(predicate: EntryCallback<K, V, boolean>, thisArg?: any): boolean;
46
+ every(predicate: EntryCallback<K, V, boolean>, thisArg?: unknown): boolean;
47
47
  /**
48
48
  * Test whether any entry satisfies the predicate.
49
49
  * @param predicate - `(key, value, index, self) => boolean`.
@@ -51,14 +51,14 @@ export declare abstract class IterableEntryBase<K = any, V = any> {
51
51
  * @returns `true` if any passes; otherwise `false`.
52
52
  * @remarks Time O(n), Space O(1)
53
53
  */
54
- some(predicate: EntryCallback<K, V, boolean>, thisArg?: any): boolean;
54
+ some(predicate: EntryCallback<K, V, boolean>, thisArg?: unknown): boolean;
55
55
  /**
56
56
  * Visit each entry, left-to-right.
57
57
  * @param callbackfn - `(key, value, index, self) => void`.
58
58
  * @param thisArg - Optional `this` for callback.
59
59
  * @remarks Time O(n), Space O(1)
60
60
  */
61
- forEach(callbackfn: EntryCallback<K, V, void>, thisArg?: any): void;
61
+ forEach(callbackfn: EntryCallback<K, V, void>, thisArg?: unknown): void;
62
62
  /**
63
63
  * Find the first entry that matches a predicate.
64
64
  * @param callbackfn - `(key, value, index, self) => boolean`.
@@ -66,7 +66,7 @@ export declare abstract class IterableEntryBase<K = any, V = any> {
66
66
  * @returns Matching `[key, value]` or `undefined`.
67
67
  * @remarks Time O(n), Space O(1)
68
68
  */
69
- find(callbackfn: EntryCallback<K, V, boolean>, thisArg?: any): [K, V] | undefined;
69
+ find(callbackfn: EntryCallback<K, V, boolean>, thisArg?: unknown): [K, V] | undefined;
70
70
  /**
71
71
  * Whether the given key exists.
72
72
  * @param key - Key to test.
@@ -134,17 +134,17 @@ export declare abstract class IterableEntryBase<K = any, V = any> {
134
134
  * Map entries using an implementation-specific strategy.
135
135
  * @remarks Time O(n), Space O(n)
136
136
  */
137
- abstract map(...args: any[]): any;
137
+ abstract map(...args: unknown[]): unknown;
138
138
  /**
139
139
  * Filter entries and return the same-species structure.
140
140
  * @returns A new instance of the same concrete class (`this` type).
141
141
  * @remarks Time O(n), Space O(n)
142
142
  */
143
- abstract filter(...args: any[]): this;
143
+ abstract filter(...args: unknown[]): this;
144
144
  /**
145
145
  * Underlying iterator for the default iteration protocol.
146
146
  * @returns Iterator of `[K, V]`.
147
147
  * @remarks Time O(n), Space O(1)
148
148
  */
149
- protected abstract _getIterator(...args: any[]): IterableIterator<[K, V]>;
149
+ protected abstract _getIterator(...args: unknown[]): IterableIterator<[K, V]>;
150
150
  }
@@ -89,7 +89,7 @@ export declare abstract class LinearBase<E, R = any, NODE extends LinkedListNode
89
89
  * @returns Index or `-1`.
90
90
  * @remarks Time O(n), Space O(1)
91
91
  */
92
- findIndex(predicate: ElementCallback<E, R, boolean>, thisArg?: any): number;
92
+ findIndex(predicate: ElementCallback<E, R, boolean>, thisArg?: unknown): number;
93
93
  /**
94
94
  * Concatenate elements and/or containers.
95
95
  * @param items - Elements or other containers.
@@ -228,7 +228,7 @@ export declare abstract class LinearBase<E, R = any, NODE extends LinkedListNode
228
228
  * @returns Iterator of elements from tail to head.
229
229
  * @remarks Time O(n), Space O(1)
230
230
  */
231
- protected abstract _getReverseIterator(...args: any[]): IterableIterator<E>;
231
+ protected abstract _getReverseIterator(...args: unknown[]): IterableIterator<E>;
232
232
  }
233
233
  /**
234
234
  * Linked-list specialized linear container.
@@ -324,7 +324,7 @@ export declare abstract class LinearLinkedBase<E, R = any, NODE extends LinkedLi
324
324
  * @returns Iterator over nodes.
325
325
  * @remarks Time O(n), Space O(1)
326
326
  */
327
- protected abstract _getNodeIterator(...args: any[]): IterableIterator<NODE>;
327
+ protected abstract _getNodeIterator(...args: unknown[]): IterableIterator<NODE>;
328
328
  /**
329
329
  * Get previous node of a given node.
330
330
  * @param node - Current node.
@@ -80,12 +80,6 @@ export declare class AVLTreeNode<K = any, V = any> {
80
80
  * @returns The node's color.
81
81
  */
82
82
  get color(): RBTNColor;
83
- /**
84
- * Sets the color of the node.
85
- * @remarks Time O(1), Space O(1)
86
- *
87
- * @param value - The new color.
88
- */
89
83
  set color(value: RBTNColor);
90
84
  _count: number;
91
85
  /**
@@ -95,12 +89,6 @@ export declare class AVLTreeNode<K = any, V = any> {
95
89
  * @returns The subtree node count.
96
90
  */
97
91
  get count(): number;
98
- /**
99
- * Sets the count of nodes in the subtree.
100
- * @remarks Time O(1), Space O(1)
101
- *
102
- * @param value - The new count.
103
- */
104
92
  set count(value: number);
105
93
  /**
106
94
  * Gets the position of the node relative to its parent.
@@ -127,28 +115,6 @@ export declare class AVLTreeNode<K = any, V = any> {
127
115
  * 7. Path Length: The path length from the root to any leaf is longer compared to an unbalanced BST, but shorter than a linear chain of nodes.
128
116
  *
129
117
  * @example
130
- * // basic AVLTree creation and add operation
131
- * // Create a simple AVLTree with initial values
132
- * const tree = new AVLTree([5, 2, 8, 1, 9]);
133
- *
134
- * tree.print();
135
- * // _2___
136
- * // / \
137
- * // 1 _8_
138
- * // / \
139
- * // 5 9
140
- *
141
- * // Verify the tree maintains sorted order
142
- * console.log([...tree.keys()]); // [1, 2, 5, 8, 9];
143
- *
144
- * // Check size
145
- * console.log(tree.size); // 5;
146
- *
147
- * // Add a new element
148
- * tree.set(3);
149
- * console.log(tree.size); // 6;
150
- * console.log([...tree.keys()]); // [1, 2, 3, 5, 8, 9];
151
- * @example
152
118
  * // AVLTree has and get operations
153
119
  * const tree = new AVLTree<number>([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
154
120
  *
@@ -163,23 +129,6 @@ export declare class AVLTreeNode<K = any, V = any> {
163
129
  * // Verify tree is balanced
164
130
  * console.log(tree.isAVLBalanced()); // true;
165
131
  * @example
166
- * // AVLTree delete and balance verification
167
- * const tree = new AVLTree([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
168
- *
169
- * // Delete an element
170
- * tree.delete(10);
171
- * console.log(tree.has(10)); // false;
172
- *
173
- * // Tree should remain balanced after deletion
174
- * console.log(tree.isAVLBalanced()); // true;
175
- *
176
- * // Size decreased
177
- * console.log(tree.size); // 15;
178
- *
179
- * // Remaining elements are still sorted
180
- * const keys = [...tree.keys()];
181
- * console.log(keys); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16];
182
- * @example
183
132
  * // AVLTree for university ranking system with strict balance
184
133
  * interface University {
185
134
  * name: string;
@@ -318,6 +267,132 @@ export declare class AVLTree<K = any, V = any, R = any> extends BST<K, V, R> imp
318
267
  * @param keyNodeOrEntry - The key, node, or entry to set.
319
268
  * @param [value] - The value, if providing just a key.
320
269
  * @returns True if the addition was successful, false otherwise.
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+ * @example
391
+ * // Set a key-value pair
392
+ * const avl = new AVLTree<number, string>();
393
+ * avl.set(1, 'one');
394
+ * avl.set(2, 'two');
395
+ * console.log(avl.get(1)); // 'one';
321
396
  */
322
397
  set(keyNodeOrEntry: K | AVLTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined, value?: V): boolean;
323
398
  /**
@@ -326,6 +401,108 @@ export declare class AVLTree<K = any, V = any, R = any> extends BST<K, V, R> imp
326
401
  *
327
402
  * @param keyNodeOrEntry - The node to delete.
328
403
  * @returns An array containing deletion results.
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+ * @example
501
+ * // Remove nodes and verify structure
502
+ * const avl = new AVLTree<number>([5, 3, 7, 1, 4, 6, 8]);
503
+ * avl.delete(3);
504
+ * console.log(avl.has(3)); // false;
505
+ * console.log(avl.size); // 6;
329
506
  */
330
507
  delete(keyNodeOrEntry: K | AVLTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined): BinaryTreeDeleteResult<AVLTreeNode<K, V>>[];
331
508
  /**
@@ -335,6 +512,68 @@ export declare class AVLTree<K = any, V = any, R = any> extends BST<K, V, R> imp
335
512
  *
336
513
  * @param [iterationType=this.iterationType] - The traversal method for the initial node export.
337
514
  * @returns True if successful, false if the tree was empty.
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+ * @example
570
+ * // Rebalance the tree
571
+ * const avl = new AVLTree<number>();
572
+ * // Insert in sorted order (worst case for BST)
573
+ * for (let i = 1; i <= 7; i++) avl.add(i);
574
+ * console.log(avl.isAVLBalanced()); // false;
575
+ * avl.perfectlyBalance();
576
+ * console.log(avl.isAVLBalanced()); // true;
338
577
  */
339
578
  perfectlyBalance(iterationType?: IterationType): boolean;
340
579
  /**
@@ -348,6 +587,96 @@ export declare class AVLTree<K = any, V = any, R = any> extends BST<K, V, R> imp
348
587
  * @param [options] - Options for the new AVLTree.
349
588
  * @param [thisArg] - `this` context for the callback.
350
589
  * @returns A new, mapped AVLTree.
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+ * @example
676
+ * // Transform to new tree
677
+ * const avl = new AVLTree<number, number>([[1, 10], [2, 20], [3, 30]]);
678
+ * const doubled = avl.map((value, key) => [key, (value ?? 0) * 2] as [number, number]);
679
+ * console.log([...doubled.values()]); // [20, 40, 60];
351
680
  */
352
681
  map<MK = K, MV = V, MR = any>(callback: EntryCallback<K, V | undefined, [MK, MV]>, options?: Partial<BinaryTreeOptions<MK, MV, MR>>, thisArg?: unknown): AVLTree<MK, MV, MR>;
353
682
  /**