data-structure-typed 2.6.1 → 2.6.2

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 (116) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/dist/cjs/binary-tree.cjs +2927 -23688
  3. package/dist/cjs/graph.cjs +845 -2634
  4. package/dist/cjs/hash.cjs +185 -616
  5. package/dist/cjs/heap.cjs +266 -818
  6. package/dist/cjs/index.cjs +5116 -31358
  7. package/dist/cjs/linked-list.cjs +644 -2615
  8. package/dist/cjs/matrix.cjs +220 -535
  9. package/dist/cjs/priority-queue.cjs +266 -818
  10. package/dist/cjs/queue.cjs +637 -2343
  11. package/dist/cjs/stack.cjs +124 -530
  12. package/dist/cjs/trie.cjs +145 -592
  13. package/dist/cjs-legacy/binary-tree.cjs +4352 -25113
  14. package/dist/cjs-legacy/graph.cjs +847 -2636
  15. package/dist/cjs-legacy/hash.cjs +181 -612
  16. package/dist/cjs-legacy/heap.cjs +266 -818
  17. package/dist/cjs-legacy/index.cjs +6657 -32899
  18. package/dist/cjs-legacy/linked-list.cjs +640 -2611
  19. package/dist/cjs-legacy/matrix.cjs +220 -535
  20. package/dist/cjs-legacy/priority-queue.cjs +266 -818
  21. package/dist/cjs-legacy/queue.cjs +634 -2340
  22. package/dist/cjs-legacy/stack.cjs +124 -530
  23. package/dist/cjs-legacy/trie.cjs +145 -592
  24. package/dist/esm/binary-tree.mjs +2927 -23688
  25. package/dist/esm/graph.mjs +845 -2634
  26. package/dist/esm/hash.mjs +185 -616
  27. package/dist/esm/heap.mjs +266 -818
  28. package/dist/esm/index.mjs +5116 -31358
  29. package/dist/esm/linked-list.mjs +644 -2615
  30. package/dist/esm/matrix.mjs +220 -535
  31. package/dist/esm/priority-queue.mjs +266 -818
  32. package/dist/esm/queue.mjs +637 -2343
  33. package/dist/esm/stack.mjs +124 -530
  34. package/dist/esm/trie.mjs +145 -592
  35. package/dist/esm-legacy/binary-tree.mjs +4352 -25113
  36. package/dist/esm-legacy/graph.mjs +847 -2636
  37. package/dist/esm-legacy/hash.mjs +181 -612
  38. package/dist/esm-legacy/heap.mjs +266 -818
  39. package/dist/esm-legacy/index.mjs +6657 -32899
  40. package/dist/esm-legacy/linked-list.mjs +640 -2611
  41. package/dist/esm-legacy/matrix.mjs +220 -535
  42. package/dist/esm-legacy/priority-queue.mjs +266 -818
  43. package/dist/esm-legacy/queue.mjs +634 -2340
  44. package/dist/esm-legacy/stack.mjs +124 -530
  45. package/dist/esm-legacy/trie.mjs +145 -592
  46. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +29 -500
  47. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +38 -563
  48. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +230 -1212
  49. package/dist/types/data-structures/binary-tree/bst.d.ts +124 -1063
  50. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +99 -854
  51. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +62 -314
  52. package/dist/types/data-structures/binary-tree/tree-map.d.ts +366 -5057
  53. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +277 -4885
  54. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +253 -3929
  55. package/dist/types/data-structures/binary-tree/tree-set.d.ts +261 -4782
  56. package/dist/types/data-structures/graph/abstract-graph.d.ts +44 -44
  57. package/dist/types/data-structures/graph/directed-graph.d.ts +130 -527
  58. package/dist/types/data-structures/graph/undirected-graph.d.ts +125 -482
  59. package/dist/types/data-structures/hash/hash-map.d.ts +132 -562
  60. package/dist/types/data-structures/heap/heap.d.ts +194 -746
  61. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +120 -809
  62. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -733
  63. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +193 -863
  64. package/dist/types/data-structures/matrix/matrix.d.ts +159 -474
  65. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +1 -6
  66. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +6 -11
  67. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  68. package/dist/types/data-structures/queue/deque.d.ts +196 -804
  69. package/dist/types/data-structures/queue/queue.d.ts +99 -585
  70. package/dist/types/data-structures/stack/stack.d.ts +75 -481
  71. package/dist/types/data-structures/trie/trie.d.ts +98 -584
  72. package/dist/umd/data-structure-typed.js +6580 -32822
  73. package/dist/umd/data-structure-typed.min.js +3 -3
  74. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +162 -215
  75. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +9 -9
  76. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +47 -47
  77. package/docs-site-docusaurus/docs/api/classes/BST.md +155 -208
  78. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +7 -7
  79. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +13 -29
  80. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +104 -158
  81. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
  82. package/docs-site-docusaurus/docs/api/classes/Deque.md +72 -104
  83. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +60 -80
  84. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +67 -101
  85. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +6 -6
  86. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +9 -9
  87. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
  88. package/docs-site-docusaurus/docs/api/classes/HashMap.md +52 -48
  89. package/docs-site-docusaurus/docs/api/classes/Heap.md +40 -68
  90. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +17 -17
  91. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +38 -38
  92. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +45 -45
  93. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +23 -23
  94. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +68 -96
  95. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +60 -80
  96. package/docs-site-docusaurus/docs/api/classes/Matrix.md +57 -52
  97. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +38 -66
  98. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +41 -74
  99. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +38 -66
  100. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +46 -79
  101. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +40 -68
  102. package/docs-site-docusaurus/docs/api/classes/Queue.md +54 -78
  103. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +171 -225
  104. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -22
  105. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +68 -98
  106. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +4 -4
  107. package/docs-site-docusaurus/docs/api/classes/SkipList.md +98 -75
  108. package/docs-site-docusaurus/docs/api/classes/Stack.md +33 -53
  109. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +104 -129
  110. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +57 -124
  111. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +45 -116
  112. package/docs-site-docusaurus/docs/api/classes/Trie.md +37 -61
  113. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
  114. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +59 -77
  115. package/package.json +1 -1
  116. package/src/data-structures/binary-tree/tree-multi-set.ts +15 -11
@@ -5,7 +5,7 @@
5
5
  * @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { BTNRep, CRUD, EntryCallback, FamilyPosition, NodePredicate, RBTNColor, IterationType, RedBlackTreeOptions } from '../../types';
8
+ import type { BTNRep, CRUD, EntryCallback, FamilyPosition, IterationType, NodePredicate, RBTNColor, RedBlackTreeOptions } from '../../types';
9
9
  import { BST } from './bst';
10
10
  import { IBinaryTree } from '../../interfaces';
11
11
  export declare class RedBlackTreeNode<K = any, V = any> {
@@ -174,8 +174,6 @@ export declare class RedBlackTreeNode<K = any, V = any> {
174
174
  * console.log(stocksInRange.some((s: any) => s.symbol === 'MSFT')); // true;
175
175
  */
176
176
  export declare class RedBlackTree<K = any, V = any, R = any> extends BST<K, V, R> implements IBinaryTree<K, V, R> {
177
- constructor(keysNodesEntriesOrRaws?: Iterable<K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined | R>, options?: RedBlackTreeOptions<K, V, R>);
178
- protected _root: RedBlackTreeNode<K, V> | undefined;
179
177
  /**
180
178
  * (Internal) Header sentinel:
181
179
  * - header.parent -> root
@@ -194,6 +192,8 @@ export declare class RedBlackTree<K = any, V = any, R = any> extends BST<K, V, R
194
192
  */
195
193
  protected _minNode: RedBlackTreeNode<K, V> | undefined;
196
194
  protected _maxNode: RedBlackTreeNode<K, V> | undefined;
195
+ constructor(keysNodesEntriesOrRaws?: Iterable<K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined | R>, options?: RedBlackTreeOptions<K, V, R>);
196
+ protected _root: RedBlackTreeNode<K, V> | undefined;
197
197
  /**
198
198
  * Get the current root node.
199
199
  * @remarks Time O(1), Space O(1)
@@ -219,172 +219,104 @@ export declare class RedBlackTree<K = any, V = any, R = any> extends BST<K, V, R
219
219
  /**
220
220
  * Remove all nodes, clear the key→value store (if in map mode) and internal caches.
221
221
  * @remarks Time O(n), Space O(1)
222
-
223
-
224
-
225
-
226
-
227
-
228
-
229
-
230
-
231
-
232
-
233
-
234
-
235
-
236
-
237
-
238
-
239
-
240
-
241
-
242
-
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
-
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
-
262
-
263
-
264
-
265
-
266
-
267
-
268
-
269
-
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
- * @example
382
- * // Remove all entries
383
- * const rbt = new RedBlackTree<number>([1, 2, 3]);
384
- * rbt.clear();
385
- * console.log(rbt.isEmpty()); // true;
222
+ * @example
223
+ * // Remove all entries
224
+ * const rbt = new RedBlackTree<number>([1, 2, 3]);
225
+ * rbt.clear();
226
+ * console.log(rbt.isEmpty()); // true;
386
227
  */
387
228
  clear(): void;
229
+ /**
230
+ * Insert/update using a hint node to speed up nearby insertions.
231
+ *
232
+ * close to the expected insertion position (often the previously returned node in a loop).
233
+ *
234
+ * When the hint is a good fit (sorted / nearly-sorted insertion), this can avoid most of the
235
+ * normal root-to-leaf search and reduce constant factors.
236
+ *
237
+ * When the hint does not match (random workloads), this will fall back to the normal set path.
238
+ * @remarks Time O(log n) average, Space O(1)
239
+ */
240
+ setWithHintNode(key: K, value: V, hint?: RedBlackTreeNode<K, V>): RedBlackTreeNode<K, V> | undefined;
241
+ /**
242
+ * Boolean wrapper for setWithHintNode.
243
+ * @remarks Time O(log n) average, Space O(1)
244
+ */
245
+ setWithHint(key: K, value: V, hint?: RedBlackTreeNode<K, V>): boolean;
246
+ /**
247
+ * Insert or update a key/value (map mode) or key-only (set mode).
248
+ *
249
+ * This method is optimized for:
250
+ * - monotonic inserts via min/max boundary fast paths
251
+ * - updates via a single-pass search (no double walk)
252
+ *
253
+ * @remarks Time O(log n) average, Space O(1)
254
+ * @example
255
+ * // basic Red-Black Tree with simple number keys
256
+ * // Create a simple Red-Black Tree with numeric keys
257
+ * const tree = new RedBlackTree([5, 2, 8, 1, 9]);
258
+ *
259
+ * tree.print();
260
+ * // _2___
261
+ * // / \
262
+ * // 1 _8_
263
+ * // / \
264
+ * // 5 9
265
+ *
266
+ * // Verify the tree maintains sorted order
267
+ * console.log([...tree.keys()]); // [1, 2, 5, 8, 9];
268
+ *
269
+ * // Check size
270
+ * console.log(tree.size); // 5;
271
+ */
272
+ set(keyNodeOrEntry: K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined, value?: V): boolean;
273
+ /**
274
+ * Delete a node by key/node/entry and rebalance as needed.
275
+ * @remarks Time O(log n) average, Space O(1)
276
+ * @param keyNodeEntryRawOrPredicate - Key, node, or [key, value] entry identifying the node to delete.
277
+ * @returns Array with deletion metadata (removed node, rebalancing hint if any).
278
+ * @example
279
+ * // Remove and rebalance
280
+ * const rbt = new RedBlackTree<number>([10, 5, 15, 3, 7]);
281
+ * rbt.delete(5);
282
+ * console.log(rbt.has(5)); // false;
283
+ * console.log(rbt.size); // 4;
284
+ */
285
+ delete(keyNodeEntryRawOrPredicate: BTNRep<K, V, RedBlackTreeNode<K, V>> | NodePredicate<RedBlackTreeNode<K, V> | null>): boolean;
286
+ /**
287
+ * Transform entries into a like-kind red-black tree with possibly different key/value types.
288
+ * @remarks Time O(n) average, Space O(n)
289
+ * @template MK
290
+ * @template MV
291
+ * @template MR
292
+ * @param callback - Mapping function from (key, value, index, tree) to a new [key, value].
293
+ * @param [options] - See parameter type for details.
294
+ * @param [thisArg] - See parameter type for details.
295
+ * @returns A new RedBlackTree with mapped entries.
296
+ */
297
+ /**
298
+ * Red-Black trees are self-balancing — `perfectlyBalance` rebuilds via
299
+ * sorted bulk insert, which naturally produces a balanced RBT.
300
+ * @remarks Time O(N), Space O(N)
301
+ * @example
302
+ * // Rebalance tree
303
+ * const rbt = new RedBlackTree<number>([1, 2, 3, 4, 5]);
304
+ * rbt.perfectlyBalance();
305
+ * console.log(rbt.isAVLBalanced()); // true;
306
+ */
307
+ perfectlyBalance(_iterationType?: IterationType): boolean;
308
+ /**
309
+ * Transform to new tree
310
+ * @example
311
+ * // Transform to new tree
312
+ * const rbt = new RedBlackTree<number, number>([
313
+ * [1, 10],
314
+ * [2, 20]
315
+ * ]);
316
+ * const doubled = rbt.map((v, k) => [k, (v ?? 0) * 2] as [number, number]);
317
+ * console.log([...doubled.values()]); // [20, 40];
318
+ */
319
+ map<MK = K, MV = V, MR = any>(callback: EntryCallback<K, V | undefined, [MK, MV]>, options?: Partial<RedBlackTreeOptions<MK, MV, MR>>, thisArg?: unknown): RedBlackTree<MK, MV, MR>;
388
320
  /**
389
321
  * (Internal) Find a node by key using a tight BST walk (no allocations).
390
322
  *
@@ -459,693 +391,6 @@ export declare class RedBlackTree<K = any, V = any, R = any> extends BST<K, V, R
459
391
  * @remarks Time O(log n) average, Space O(1)
460
392
  */
461
393
  protected _setKV(key: K, nextValue?: V): boolean;
462
- /**
463
- * Insert/update using a hint node to speed up nearby insertions.
464
- *
465
- * close to the expected insertion position (often the previously returned node in a loop).
466
- *
467
- * When the hint is a good fit (sorted / nearly-sorted insertion), this can avoid most of the
468
- * normal root-to-leaf search and reduce constant factors.
469
- *
470
- * When the hint does not match (random workloads), this will fall back to the normal set path.
471
- * @remarks Time O(log n) average, Space O(1)
472
- */
473
- setWithHintNode(key: K, value: V, hint?: RedBlackTreeNode<K, V>): RedBlackTreeNode<K, V> | undefined;
474
- /**
475
- * Boolean wrapper for setWithHintNode.
476
- * @remarks Time O(log n) average, Space O(1)
477
- */
478
- setWithHint(key: K, value: V, hint?: RedBlackTreeNode<K, V>): boolean;
479
- /**
480
- * Insert or update a key/value (map mode) or key-only (set mode).
481
- *
482
- * This method is optimized for:
483
- * - monotonic inserts via min/max boundary fast paths
484
- * - updates via a single-pass search (no double walk)
485
- *
486
- * @remarks Time O(log n) average, Space O(1)
487
-
488
-
489
-
490
-
491
-
492
-
493
-
494
-
495
-
496
-
497
-
498
-
499
-
500
-
501
-
502
-
503
-
504
-
505
-
506
-
507
-
508
-
509
-
510
-
511
-
512
-
513
-
514
-
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
-
570
-
571
-
572
-
573
-
574
-
575
-
576
-
577
-
578
-
579
-
580
-
581
-
582
-
583
-
584
-
585
-
586
-
587
-
588
-
589
-
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
- * @example
648
- * // basic Red-Black Tree with simple number keys
649
- * // Create a simple Red-Black Tree with numeric keys
650
- * const tree = new RedBlackTree([5, 2, 8, 1, 9]);
651
- *
652
- * tree.print();
653
- * // _2___
654
- * // / \
655
- * // 1 _8_
656
- * // / \
657
- * // 5 9
658
- *
659
- * // Verify the tree maintains sorted order
660
- * console.log([...tree.keys()]); // [1, 2, 5, 8, 9];
661
- *
662
- * // Check size
663
- * console.log(tree.size); // 5;
664
- */
665
- set(keyNodeOrEntry: K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined, value?: V): boolean;
666
- /**
667
- * Delete a node by key/node/entry and rebalance as needed.
668
- * @remarks Time O(log n) average, Space O(1)
669
- * @param keyNodeEntryRawOrPredicate - Key, node, or [key, value] entry identifying the node to delete.
670
- * @returns Array with deletion metadata (removed node, rebalancing hint if any).
671
-
672
-
673
-
674
-
675
-
676
-
677
-
678
-
679
-
680
-
681
-
682
-
683
-
684
-
685
-
686
-
687
-
688
-
689
-
690
-
691
-
692
-
693
-
694
-
695
-
696
-
697
-
698
-
699
-
700
-
701
-
702
-
703
-
704
-
705
-
706
-
707
-
708
-
709
-
710
-
711
-
712
-
713
-
714
-
715
-
716
-
717
-
718
-
719
-
720
-
721
-
722
-
723
-
724
-
725
-
726
-
727
-
728
-
729
-
730
-
731
-
732
-
733
-
734
-
735
-
736
-
737
-
738
-
739
-
740
-
741
-
742
-
743
-
744
-
745
-
746
-
747
-
748
-
749
-
750
-
751
-
752
-
753
-
754
-
755
-
756
-
757
-
758
-
759
-
760
-
761
-
762
-
763
-
764
-
765
-
766
-
767
-
768
-
769
-
770
-
771
-
772
-
773
-
774
-
775
-
776
-
777
-
778
-
779
-
780
-
781
-
782
-
783
-
784
-
785
-
786
-
787
-
788
-
789
-
790
-
791
-
792
-
793
-
794
-
795
-
796
-
797
-
798
-
799
-
800
-
801
-
802
-
803
-
804
-
805
-
806
-
807
-
808
-
809
-
810
-
811
-
812
-
813
-
814
-
815
-
816
-
817
-
818
-
819
-
820
-
821
-
822
-
823
-
824
-
825
-
826
-
827
-
828
-
829
-
830
-
831
-
832
-
833
- * @example
834
- * // Remove and rebalance
835
- * const rbt = new RedBlackTree<number>([10, 5, 15, 3, 7]);
836
- * rbt.delete(5);
837
- * console.log(rbt.has(5)); // false;
838
- * console.log(rbt.size); // 4;
839
- */
840
- delete(keyNodeEntryRawOrPredicate: BTNRep<K, V, RedBlackTreeNode<K, V>> | NodePredicate<RedBlackTreeNode<K, V> | null>): boolean;
841
- /**
842
- * Transform entries into a like-kind red-black tree with possibly different key/value types.
843
- * @remarks Time O(n) average, Space O(n)
844
- * @template MK
845
- * @template MV
846
- * @template MR
847
- * @param callback - Mapping function from (key, value, index, tree) to a new [key, value].
848
- * @param [options] - See parameter type for details.
849
- * @param [thisArg] - See parameter type for details.
850
- * @returns A new RedBlackTree with mapped entries.
851
- */
852
- /**
853
- * Red-Black trees are self-balancing — `perfectlyBalance` rebuilds via
854
- * sorted bulk insert, which naturally produces a balanced RBT.
855
- * @remarks Time O(N), Space O(N)
856
-
857
-
858
-
859
-
860
-
861
-
862
-
863
-
864
-
865
-
866
-
867
-
868
-
869
-
870
-
871
-
872
-
873
-
874
-
875
-
876
-
877
-
878
-
879
-
880
-
881
-
882
-
883
-
884
-
885
-
886
-
887
-
888
-
889
-
890
-
891
-
892
-
893
-
894
-
895
-
896
-
897
-
898
-
899
-
900
-
901
-
902
-
903
-
904
-
905
-
906
-
907
-
908
-
909
-
910
-
911
-
912
-
913
-
914
-
915
-
916
-
917
-
918
-
919
-
920
-
921
-
922
-
923
-
924
-
925
-
926
-
927
-
928
-
929
-
930
-
931
-
932
-
933
-
934
-
935
-
936
-
937
-
938
-
939
-
940
-
941
-
942
-
943
-
944
-
945
-
946
-
947
-
948
-
949
-
950
-
951
-
952
-
953
-
954
-
955
-
956
-
957
-
958
-
959
-
960
-
961
-
962
-
963
-
964
-
965
-
966
-
967
-
968
-
969
-
970
-
971
-
972
-
973
-
974
- * @example
975
- * // Rebalance tree
976
- * const rbt = new RedBlackTree<number>([1, 2, 3, 4, 5]);
977
- * rbt.perfectlyBalance();
978
- * console.log(rbt.isAVLBalanced()); // true;
979
- */
980
- perfectlyBalance(_iterationType?: IterationType): boolean;
981
- /**
982
- * Transform to new tree
983
-
984
-
985
-
986
-
987
-
988
-
989
-
990
-
991
-
992
-
993
-
994
-
995
-
996
-
997
-
998
-
999
-
1000
-
1001
-
1002
-
1003
-
1004
-
1005
-
1006
-
1007
-
1008
-
1009
-
1010
-
1011
-
1012
-
1013
-
1014
-
1015
-
1016
-
1017
-
1018
-
1019
-
1020
-
1021
-
1022
-
1023
-
1024
-
1025
-
1026
-
1027
-
1028
-
1029
-
1030
-
1031
-
1032
-
1033
-
1034
-
1035
-
1036
-
1037
-
1038
-
1039
-
1040
-
1041
-
1042
-
1043
-
1044
-
1045
-
1046
-
1047
-
1048
-
1049
-
1050
-
1051
-
1052
-
1053
-
1054
-
1055
-
1056
-
1057
-
1058
-
1059
-
1060
-
1061
-
1062
-
1063
-
1064
-
1065
-
1066
-
1067
-
1068
-
1069
-
1070
-
1071
-
1072
-
1073
-
1074
-
1075
-
1076
-
1077
-
1078
-
1079
-
1080
-
1081
-
1082
-
1083
-
1084
-
1085
-
1086
-
1087
-
1088
-
1089
-
1090
-
1091
-
1092
-
1093
-
1094
-
1095
-
1096
-
1097
-
1098
-
1099
-
1100
-
1101
-
1102
-
1103
-
1104
-
1105
-
1106
-
1107
-
1108
-
1109
-
1110
-
1111
-
1112
-
1113
-
1114
-
1115
-
1116
-
1117
-
1118
-
1119
-
1120
-
1121
-
1122
-
1123
-
1124
-
1125
-
1126
-
1127
-
1128
-
1129
-
1130
-
1131
-
1132
-
1133
-
1134
-
1135
-
1136
-
1137
-
1138
-
1139
-
1140
-
1141
-
1142
- * @example
1143
- * // Transform to new tree
1144
- * const rbt = new RedBlackTree<number, number>([[1, 10], [2, 20]]);
1145
- * const doubled = rbt.map((v, k) => [k, (v ?? 0) * 2] as [number, number]);
1146
- * console.log([...doubled.values()]); // [20, 40];
1147
- */
1148
- map<MK = K, MV = V, MR = any>(callback: EntryCallback<K, V | undefined, [MK, MV]>, options?: Partial<RedBlackTreeOptions<MK, MV, MR>>, thisArg?: unknown): RedBlackTree<MK, MV, MR>;
1149
394
  /**
1150
395
  * (Internal) Create an empty instance of the same concrete tree type.
1151
396
  * @remarks Time O(1) average, Space O(1)