data-structure-typed 2.5.1 → 2.5.3

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 (184) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/MIGRATION.md +169 -0
  3. package/README.md +135 -23
  4. package/README_CN.md +551 -143
  5. package/SPECIFICATION.md +20 -14
  6. package/SPECIFICATION.zh-CN.md +20 -14
  7. package/dist/cjs/binary-tree.cjs +6460 -1591
  8. package/dist/cjs/graph.cjs +440 -20
  9. package/dist/cjs/hash.cjs +125 -22
  10. package/dist/cjs/heap.cjs +196 -47
  11. package/dist/cjs/index.cjs +8486 -2429
  12. package/dist/cjs/linked-list.cjs +456 -31
  13. package/dist/cjs/matrix.cjs +79 -9
  14. package/dist/cjs/priority-queue.cjs +193 -44
  15. package/dist/cjs/queue.cjs +391 -2
  16. package/dist/cjs/stack.cjs +92 -6
  17. package/dist/cjs/trie.cjs +122 -28
  18. package/dist/cjs-legacy/binary-tree.cjs +6484 -1612
  19. package/dist/cjs-legacy/graph.cjs +440 -20
  20. package/dist/cjs-legacy/hash.cjs +125 -22
  21. package/dist/cjs-legacy/heap.cjs +196 -47
  22. package/dist/cjs-legacy/index.cjs +8654 -2594
  23. package/dist/cjs-legacy/linked-list.cjs +456 -31
  24. package/dist/cjs-legacy/matrix.cjs +79 -9
  25. package/dist/cjs-legacy/priority-queue.cjs +193 -44
  26. package/dist/cjs-legacy/queue.cjs +391 -2
  27. package/dist/cjs-legacy/stack.cjs +92 -6
  28. package/dist/cjs-legacy/trie.cjs +122 -28
  29. package/dist/esm/binary-tree.mjs +6460 -1591
  30. package/dist/esm/graph.mjs +440 -20
  31. package/dist/esm/hash.mjs +125 -22
  32. package/dist/esm/heap.mjs +196 -47
  33. package/dist/esm/index.mjs +8486 -2430
  34. package/dist/esm/linked-list.mjs +456 -31
  35. package/dist/esm/matrix.mjs +79 -9
  36. package/dist/esm/priority-queue.mjs +193 -44
  37. package/dist/esm/queue.mjs +391 -2
  38. package/dist/esm/stack.mjs +92 -6
  39. package/dist/esm/trie.mjs +122 -28
  40. package/dist/esm-legacy/binary-tree.mjs +6484 -1612
  41. package/dist/esm-legacy/graph.mjs +440 -20
  42. package/dist/esm-legacy/hash.mjs +125 -22
  43. package/dist/esm-legacy/heap.mjs +196 -47
  44. package/dist/esm-legacy/index.mjs +8654 -2595
  45. package/dist/esm-legacy/linked-list.mjs +456 -31
  46. package/dist/esm-legacy/matrix.mjs +79 -9
  47. package/dist/esm-legacy/priority-queue.mjs +193 -44
  48. package/dist/esm-legacy/queue.mjs +391 -2
  49. package/dist/esm-legacy/stack.mjs +92 -6
  50. package/dist/esm-legacy/trie.mjs +122 -28
  51. package/dist/types/common/error.d.ts +9 -0
  52. package/dist/types/common/index.d.ts +1 -1
  53. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +98 -2
  54. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +112 -0
  55. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +214 -13
  56. package/dist/types/data-structures/binary-tree/bst.d.ts +294 -3
  57. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +155 -8
  58. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +48 -0
  59. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1370 -323
  60. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1329 -316
  61. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +1116 -295
  62. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1330 -326
  63. package/dist/types/data-structures/graph/directed-graph.d.ts +80 -0
  64. package/dist/types/data-structures/graph/undirected-graph.d.ts +72 -0
  65. package/dist/types/data-structures/hash/hash-map.d.ts +95 -6
  66. package/dist/types/data-structures/heap/heap.d.ts +154 -12
  67. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +143 -0
  68. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -1
  69. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +144 -0
  70. package/dist/types/data-structures/matrix/matrix.d.ts +64 -0
  71. package/dist/types/data-structures/queue/deque.d.ts +142 -0
  72. package/dist/types/data-structures/queue/queue.d.ts +109 -0
  73. package/dist/types/data-structures/stack/stack.d.ts +82 -2
  74. package/dist/types/data-structures/trie/trie.d.ts +96 -0
  75. package/dist/types/interfaces/binary-tree.d.ts +2 -3
  76. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  77. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  78. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  79. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  80. package/dist/umd/data-structure-typed.js +8623 -2564
  81. package/dist/umd/data-structure-typed.min.js +5 -5
  82. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +696 -194
  83. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
  84. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +71 -71
  85. package/docs-site-docusaurus/docs/api/classes/BST.md +639 -189
  86. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
  87. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
  88. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +148 -160
  89. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
  90. package/docs-site-docusaurus/docs/api/classes/Deque.md +105 -91
  91. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +82 -82
  92. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +104 -74
  93. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
  94. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
  95. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
  96. package/docs-site-docusaurus/docs/api/classes/HashMap.md +51 -51
  97. package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
  98. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
  99. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +33 -33
  100. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +50 -50
  101. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +55 -55
  102. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +55 -55
  103. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
  104. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +78 -78
  105. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +82 -82
  106. package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
  107. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
  108. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
  109. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
  110. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
  111. package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
  112. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
  113. package/docs-site-docusaurus/docs/api/classes/Queue.md +112 -60
  114. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +708 -206
  115. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
  116. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +79 -79
  117. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
  118. package/docs-site-docusaurus/docs/api/classes/SkipList.md +44 -44
  119. package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
  120. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +236 -33
  121. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +162 -46
  122. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +232 -32
  123. package/docs-site-docusaurus/docs/api/classes/Trie.md +47 -47
  124. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
  125. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +81 -81
  126. package/docs-site-docusaurus/docs/guide/architecture.md +75 -5
  127. package/docs-site-docusaurus/docs/guide/concepts.md +53 -3
  128. package/docs-site-docusaurus/docs/guide/faq.md +233 -0
  129. package/docs-site-docusaurus/docs/guide/guides.md +43 -58
  130. package/docs-site-docusaurus/docs/guide/installation.md +2 -0
  131. package/docs-site-docusaurus/docs/guide/integrations.md +75 -176
  132. package/docs-site-docusaurus/docs/guide/overview.md +132 -11
  133. package/docs-site-docusaurus/docs/guide/performance.md +2 -0
  134. package/docs-site-docusaurus/docs/guide/quick-start.md +31 -0
  135. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  136. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  137. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  138. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  139. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  140. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  141. package/docs-site-docusaurus/docusaurus.config.ts +1 -1
  142. package/docs-site-docusaurus/src/pages/index.tsx +55 -2
  143. package/docs-site-docusaurus/static/llms.txt +37 -0
  144. package/docs-site-docusaurus/typedoc.json +1 -0
  145. package/llms.txt +37 -0
  146. package/package.json +65 -56
  147. package/src/common/error.ts +19 -1
  148. package/src/common/index.ts +1 -1
  149. package/src/data-structures/base/iterable-element-base.ts +3 -2
  150. package/src/data-structures/binary-tree/avl-tree.ts +99 -5
  151. package/src/data-structures/binary-tree/binary-indexed-tree.ts +102 -4
  152. package/src/data-structures/binary-tree/binary-tree.ts +239 -78
  153. package/src/data-structures/binary-tree/bst.ts +542 -13
  154. package/src/data-structures/binary-tree/red-black-tree.ts +155 -15
  155. package/src/data-structures/binary-tree/segment-tree.ts +42 -0
  156. package/src/data-structures/binary-tree/tree-map.ts +1223 -261
  157. package/src/data-structures/binary-tree/tree-multi-map.ts +939 -30
  158. package/src/data-structures/binary-tree/tree-multi-set.ts +746 -10
  159. package/src/data-structures/binary-tree/tree-set.ts +1018 -99
  160. package/src/data-structures/graph/abstract-graph.ts +2 -2
  161. package/src/data-structures/graph/directed-graph.ts +71 -1
  162. package/src/data-structures/graph/undirected-graph.ts +64 -1
  163. package/src/data-structures/hash/hash-map.ts +102 -16
  164. package/src/data-structures/heap/heap.ts +153 -23
  165. package/src/data-structures/heap/max-heap.ts +2 -2
  166. package/src/data-structures/linked-list/doubly-linked-list.ts +139 -0
  167. package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
  168. package/src/data-structures/linked-list/skip-linked-list.ts +131 -5
  169. package/src/data-structures/matrix/matrix.ts +65 -9
  170. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  171. package/src/data-structures/queue/deque.ts +130 -0
  172. package/src/data-structures/queue/queue.ts +109 -0
  173. package/src/data-structures/stack/stack.ts +75 -5
  174. package/src/data-structures/trie/trie.ts +86 -2
  175. package/src/interfaces/binary-tree.ts +1 -9
  176. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  177. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  178. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  179. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  180. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
  181. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
  182. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
  183. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
  184. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
@@ -192,29 +192,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
192
192
 
193
193
 
194
194
 
195
- * @example
196
- * // Check empty
197
- * console.log(new TreeSet().isEmpty()); // true;
198
- */
199
- isEmpty(): boolean;
200
- private _validateKey;
201
- /**
202
- * Add a key to the set (no-op if already present).
203
- * @remarks Expected time O(log n)
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
-
218
195
 
219
196
 
220
197
 
@@ -255,6 +232,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
255
232
 
256
233
 
257
234
 
235
+ * @example
236
+ * // Check empty
237
+ * console.log(new TreeSet().isEmpty()); // true;
238
+ */
239
+ isEmpty(): boolean;
240
+ private _validateKey;
241
+ /**
242
+ * Add a key to the set (no-op if already present).
243
+ * @remarks Expected time O(log n)
258
244
 
259
245
 
260
246
 
@@ -342,22 +328,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
342
328
 
343
329
 
344
330
 
345
- * @example
346
- * // Unique tags with sorted order
347
- * const tags = new TreeSet<string>(['javascript', 'typescript', 'react', 'typescript', 'node']);
348
- *
349
- * // Duplicates removed, sorted alphabetically
350
- * console.log([...tags]); // ['javascript', 'node', 'react', 'typescript'];
351
- * console.log(tags.size); // 4;
352
- *
353
- * tags.add('angular');
354
- * console.log(tags.first()); // 'angular';
355
- * console.log(tags.last()); // 'typescript';
356
- */
357
- add(key: K): this;
358
- /**
359
- * Test whether a key exists.
360
- * @remarks Expected time O(log n)
361
331
 
362
332
 
363
333
 
@@ -452,6 +422,25 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
452
422
 
453
423
 
454
424
 
425
+ * @example
426
+ * // Unique tags with sorted order
427
+ * const tags = new TreeSet<string>(['javascript', 'typescript', 'react', 'typescript', 'node']);
428
+ *
429
+ * // Duplicates removed, sorted alphabetically
430
+ * console.log([...tags]); // ['javascript', 'node', 'react', 'typescript'];
431
+ * console.log(tags.size); // 4;
432
+ *
433
+ * tags.add('angular');
434
+ * console.log(tags.first()); // 'angular';
435
+ * console.log(tags.last()); // 'typescript';
436
+ */
437
+ add(key: K): this;
438
+ /**
439
+ * Add multiple keys at once.
440
+ * @remarks Expected time O(m log n), where m is the number of keys.
441
+ * @param keys - Iterable of keys to add.
442
+ * @returns Array of booleans indicating whether each key was newly added.
443
+
455
444
 
456
445
 
457
446
 
@@ -467,6 +456,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
467
456
 
468
457
 
469
458
 
459
+ * @example
460
+ * // Add multiple keys
461
+ * const ts = new TreeSet<number>();
462
+ * ts.addMany([5, 3, 7, 1, 9]);
463
+ * console.log(ts.size); // 5;
464
+ */
465
+ addMany(keys: Iterable<K>): boolean[];
466
+ /**
467
+ * Test whether a key exists.
468
+ * @remarks Expected time O(log n)
470
469
 
471
470
 
472
471
 
@@ -507,18 +506,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
507
506
 
508
507
 
509
508
 
510
- * @example
511
- * // Checking membership in a sorted collection
512
- * const allowed = new TreeSet<string>(['admin', 'editor', 'viewer']);
513
- *
514
- * console.log(allowed.has('admin')); // true;
515
- * console.log(allowed.has('guest')); // false;
516
- */
517
- has(key: K): boolean;
518
- /**
519
- * Delete a key.
520
- * @returns `true` if the key existed; otherwise `false`.
521
- * @remarks Expected time O(log n)
522
509
 
523
510
 
524
511
 
@@ -669,23 +656,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
669
656
 
670
657
 
671
658
  * @example
672
- * // Removing elements while maintaining order
673
- * const nums = new TreeSet<number>([1, 3, 5, 7, 9]);
659
+ * // Checking membership in a sorted collection
660
+ * const allowed = new TreeSet<string>(['admin', 'editor', 'viewer']);
674
661
  *
675
- * console.log(nums.delete(5)); // true;
676
- * console.log(nums.delete(5)); // false; // already gone
677
- * console.log([...nums]); // [1, 3, 7, 9];
662
+ * console.log(allowed.has('admin')); // true;
663
+ * console.log(allowed.has('guest')); // false;
678
664
  */
679
- delete(key: K): boolean;
665
+ has(key: K): boolean;
680
666
  /**
681
- * Remove all keys.
682
-
683
-
684
-
685
-
686
-
687
-
688
-
667
+ * Delete a key.
668
+ * @returns `true` if the key existed; otherwise `false`.
669
+ * @remarks Expected time O(log n)
689
670
 
690
671
 
691
672
 
@@ -817,15 +798,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
817
798
 
818
799
 
819
800
 
820
- * @example
821
- * // Remove all
822
- * const ts = new TreeSet<number>([1, 2]);
823
- * ts.clear();
824
- * console.log(ts.isEmpty()); // true;
825
- */
826
- clear(): void;
827
- /**
828
- * Iterate over keys in ascending order.
829
801
 
830
802
 
831
803
 
@@ -884,6 +856,24 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
884
856
 
885
857
 
886
858
 
859
+ * @example
860
+ * // Removing elements while maintaining order
861
+ * const nums = new TreeSet<number>([1, 3, 5, 7, 9]);
862
+ *
863
+ * console.log(nums.delete(5)); // true;
864
+ * console.log(nums.delete(5)); // false; // already gone
865
+ * console.log([...nums]); // [1, 3, 7, 9];
866
+ */
867
+ delete(key: K): boolean;
868
+ /**
869
+ * Delete all keys matching a predicate.
870
+ * @remarks Time O(N), Space O(N)
871
+ * @param predicate - Function (key, index, set) → boolean; return true to delete.
872
+ * @returns True if at least one key was deleted.
873
+ */
874
+ deleteWhere(predicate: (key: K, index: number, set: this) => boolean): boolean;
875
+ /**
876
+ * Remove all keys.
887
877
 
888
878
 
889
879
 
@@ -964,16 +954,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
964
954
 
965
955
 
966
956
 
967
- * @example
968
- * // Get sorted keys
969
- * const ts = new TreeSet<number>([30, 10, 20]);
970
- * console.log([...ts.keys()]); // [10, 20, 30];
971
- */
972
- keys(): IterableIterator<K>;
973
- /**
974
- * Iterate over values in ascending order.
975
- *
976
- * Note: for Set-like containers, `values()` is the same as `keys()`.
977
957
 
978
958
 
979
959
 
@@ -1072,6 +1052,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1072
1052
 
1073
1053
 
1074
1054
 
1055
+ * @example
1056
+ * // Remove all
1057
+ * const ts = new TreeSet<number>([1, 2]);
1058
+ * ts.clear();
1059
+ * console.log(ts.isEmpty()); // true;
1060
+ */
1061
+ clear(): void;
1062
+ /**
1063
+ * Iterate over keys in ascending order.
1075
1064
 
1076
1065
 
1077
1066
 
@@ -1112,16 +1101,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1112
1101
 
1113
1102
 
1114
1103
 
1115
- * @example
1116
- * // Get values (same as keys for Set)
1117
- * const ts = new TreeSet<number>([2, 1, 3]);
1118
- * console.log([...ts.values()]); // [1, 2, 3];
1119
- */
1120
- values(): IterableIterator<K>;
1121
- /**
1122
- * Iterate over `[value, value]` pairs (native Set convention).
1123
- *
1124
- * Note: TreeSet stores only keys internally; `[k, k]` is created on-the-fly during iteration.
1125
1104
 
1126
1105
 
1127
1106
 
@@ -1261,18 +1240,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1261
1240
 
1262
1241
 
1263
1242
  * @example
1264
- * // Iterate entries
1265
- * const ts = new TreeSet<number>([3, 1, 2]);
1266
- * console.log([...ts.entries()].map(([k]) => k)); // [1, 2, 3];
1243
+ * // Get sorted keys
1244
+ * const ts = new TreeSet<number>([30, 10, 20]);
1245
+ * console.log([...ts.keys()]); // [10, 20, 30];
1267
1246
  */
1268
- entries(): IterableIterator<[K, K]>;
1269
- [Symbol.iterator](): IterableIterator<K>;
1247
+ keys(): IterableIterator<K>;
1270
1248
  /**
1271
- * Visit each value in ascending order.
1249
+ * Iterate over values in ascending order.
1272
1250
  *
1273
- * Callback follows native Set convention: `(value, value2, set)`.
1274
-
1275
-
1251
+ * Note: for Set-like containers, `values()` is the same as `keys()`.
1276
1252
 
1277
1253
 
1278
1254
 
@@ -1409,19 +1385,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1409
1385
 
1410
1386
 
1411
1387
 
1412
- * @example
1413
- * // Execute for each
1414
- * const ts = new TreeSet<number>([3, 1, 2]);
1415
- * const keys: number[] = [];
1416
- * ts.forEach(k => keys.push(k));
1417
- * console.log(keys); // [1, 2, 3];
1418
- */
1419
- forEach(cb: (value: K, value2: K, set: TreeSet<K>) => void, thisArg?: unknown): void;
1420
- /**
1421
- * Create a new TreeSet by mapping each value to a new key.
1422
- *
1423
- * This mirrors `RedBlackTree.map`: mapping produces a new ordered container.
1424
- * @remarks Time O(n log n) expected, Space O(n)
1425
1388
 
1426
1389
 
1427
1390
 
@@ -1464,6 +1427,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1464
1427
 
1465
1428
 
1466
1429
 
1430
+ * @example
1431
+ * // Get values (same as keys for Set)
1432
+ * const ts = new TreeSet<number>([2, 1, 3]);
1433
+ * console.log([...ts.values()]); // [1, 2, 3];
1434
+ */
1435
+ values(): IterableIterator<K>;
1436
+ /**
1437
+ * Iterate over `[value, value]` pairs (native Set convention).
1438
+ *
1439
+ * Note: TreeSet stores only keys internally; `[k, k]` is created on-the-fly during iteration.
1467
1440
 
1468
1441
 
1469
1442
 
@@ -1560,18 +1533,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1560
1533
 
1561
1534
 
1562
1535
 
1563
- * @example
1564
- * // Transform
1565
- * const ts = new TreeSet<number>([1, 2, 3]);
1566
- * const doubled = ts.map(k => k * 2);
1567
- * console.log([...doubled]); // [2, 4, 6];
1568
- */
1569
- map<MK>(callbackfn: TreeSetElementCallback<K, MK, TreeSet<K>>, options?: Omit<TreeSetOptions<MK>, 'toElementFn'> & {
1570
- comparator?: (a: MK, b: MK) => number;
1571
- }, thisArg?: unknown): TreeSet<MK>;
1572
- /**
1573
- * Create a new TreeSet containing only values that satisfy the predicate.
1574
- * @remarks Time O(n log n) expected, Space O(n)
1575
1536
 
1576
1537
 
1577
1538
 
@@ -1654,6 +1615,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1654
1615
 
1655
1616
 
1656
1617
 
1618
+ * @example
1619
+ * // Iterate entries
1620
+ * const ts = new TreeSet<number>([3, 1, 2]);
1621
+ * console.log([...ts.entries()].map(([k]) => k)); // [1, 2, 3];
1622
+ */
1623
+ entries(): IterableIterator<[K, K]>;
1624
+ [Symbol.iterator](): IterableIterator<K>;
1625
+ /**
1626
+ * Visit each value in ascending order.
1627
+ *
1628
+ * Callback follows native Set convention: `(value, value2, set)`.
1657
1629
 
1658
1630
 
1659
1631
 
@@ -1710,16 +1682,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1710
1682
 
1711
1683
 
1712
1684
 
1713
- * @example
1714
- * // Filter
1715
- * const ts = new TreeSet<number>([1, 2, 3, 4, 5]);
1716
- * const evens = ts.filter(k => k % 2 === 0);
1717
- * console.log([...evens]); // [2, 4];
1718
- */
1719
- filter(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): TreeSet<K>;
1720
- /**
1721
- * Reduce values into a single accumulator.
1722
- * @remarks Time O(n), Space O(1)
1723
1685
 
1724
1686
 
1725
1687
 
@@ -1842,6 +1804,19 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1842
1804
 
1843
1805
 
1844
1806
 
1807
+ * @example
1808
+ * // Execute for each
1809
+ * const ts = new TreeSet<number>([3, 1, 2]);
1810
+ * const keys: number[] = [];
1811
+ * ts.forEach(k => keys.push(k));
1812
+ * console.log(keys); // [1, 2, 3];
1813
+ */
1814
+ forEach(cb: (value: K, value2: K, set: TreeSet<K>) => void, thisArg?: unknown): void;
1815
+ /**
1816
+ * Create a new TreeSet by mapping each value to a new key.
1817
+ *
1818
+ * This mirrors `RedBlackTree.map`: mapping produces a new ordered container.
1819
+ * @remarks Time O(n log n) expected, Space O(n)
1845
1820
 
1846
1821
 
1847
1822
 
@@ -1858,16 +1833,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
1858
1833
 
1859
1834
 
1860
1835
 
1861
- * @example
1862
- * // Aggregate
1863
- * const ts = new TreeSet<number>([1, 2, 3]);
1864
- * const sum = ts.reduce((acc, k) => acc + k, 0);
1865
- * console.log(sum); // 6;
1866
- */
1867
- reduce<A>(callbackfn: TreeSetReduceCallback<K, A, TreeSet<K>>, initialValue: A): A;
1868
- /**
1869
- * Test whether all values satisfy a predicate.
1870
- * @remarks Time O(n), Space O(1)
1871
1836
 
1872
1837
 
1873
1838
 
@@ -2004,15 +1969,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2004
1969
 
2005
1970
 
2006
1971
 
2007
- * @example
2008
- * // Test all
2009
- * const ts = new TreeSet<number>([2, 4, 6]);
2010
- * console.log(ts.every(k => k > 0)); // true;
2011
- */
2012
- every(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
2013
- /**
2014
- * Test whether any value satisfies a predicate.
2015
- * @remarks Time O(n), Space O(1)
2016
1972
 
2017
1973
 
2018
1974
 
@@ -2039,6 +1995,18 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2039
1995
 
2040
1996
 
2041
1997
 
1998
+ * @example
1999
+ * // Transform
2000
+ * const ts = new TreeSet<number>([1, 2, 3]);
2001
+ * const doubled = ts.map(k => k * 2);
2002
+ * console.log([...doubled]); // [2, 4, 6];
2003
+ */
2004
+ map<MK>(callbackfn: TreeSetElementCallback<K, MK, TreeSet<K>>, options?: Omit<TreeSetOptions<MK>, 'toElementFn'> & {
2005
+ comparator?: (a: MK, b: MK) => number;
2006
+ }, thisArg?: unknown): TreeSet<MK>;
2007
+ /**
2008
+ * Create a new TreeSet containing only values that satisfy the predicate.
2009
+ * @remarks Time O(n log n) expected, Space O(n)
2042
2010
 
2043
2011
 
2044
2012
 
@@ -2149,15 +2117,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2149
2117
 
2150
2118
 
2151
2119
 
2152
- * @example
2153
- * // Test any
2154
- * const ts = new TreeSet<number>([1, 3, 5]);
2155
- * console.log(ts.some(k => k === 3)); // true;
2156
- */
2157
- some(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
2158
- /**
2159
- * Find the first value that satisfies a predicate.
2160
- * @remarks Time O(n), Space O(1)
2161
2120
 
2162
2121
 
2163
2122
 
@@ -2226,6 +2185,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2226
2185
 
2227
2186
 
2228
2187
 
2188
+ * @example
2189
+ * // Filter
2190
+ * const ts = new TreeSet<number>([1, 2, 3, 4, 5]);
2191
+ * const evens = ts.filter(k => k % 2 === 0);
2192
+ * console.log([...evens]); // [2, 4];
2193
+ */
2194
+ filter(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): TreeSet<K>;
2195
+ /**
2196
+ * Reduce values into a single accumulator.
2197
+ * @remarks Time O(n), Space O(1)
2229
2198
 
2230
2199
 
2231
2200
 
@@ -2294,16 +2263,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2294
2263
 
2295
2264
 
2296
2265
 
2297
- * @example
2298
- * // Find entry
2299
- * const ts = new TreeSet<number>([1, 2, 3]);
2300
- * const found = ts.find(k => k === 2);
2301
- * console.log(found); // 2;
2302
- */
2303
- find(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): K | undefined;
2304
- /**
2305
- * Materialize the set into an array of keys.
2306
- * @remarks Time O(n), Space O(n)
2307
2266
 
2308
2267
 
2309
2268
 
@@ -2414,6 +2373,16 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2414
2373
 
2415
2374
 
2416
2375
 
2376
+ * @example
2377
+ * // Aggregate
2378
+ * const ts = new TreeSet<number>([1, 2, 3]);
2379
+ * const sum = ts.reduce((acc, k) => acc + k, 0);
2380
+ * console.log(sum); // 6;
2381
+ */
2382
+ reduce<A>(callbackfn: TreeSetReduceCallback<K, A, TreeSet<K>>, initialValue: A): A;
2383
+ /**
2384
+ * Test whether all values satisfy a predicate.
2385
+ * @remarks Time O(n), Space O(1)
2417
2386
 
2418
2387
 
2419
2388
 
@@ -2442,15 +2411,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2442
2411
 
2443
2412
 
2444
2413
 
2445
- * @example
2446
- * // Convert to array
2447
- * const ts = new TreeSet<number>([3, 1, 2]);
2448
- * console.log(ts.toArray()); // [1, 2, 3];
2449
- */
2450
- toArray(): K[];
2451
- /**
2452
- * Print a human-friendly representation.
2453
- * @remarks Time O(n), Space O(n)
2454
2414
 
2455
2415
 
2456
2416
 
@@ -2589,14 +2549,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2589
2549
 
2590
2550
 
2591
2551
 
2592
- * @example
2593
- * // Display tree
2594
- * const ts = new TreeSet<number>([1, 2, 3]);
2595
- * expect(() => ts.print()).not.toThrow();
2596
- */
2597
- print(): void;
2598
- /**
2599
- * Smallest key in the set.
2600
2552
 
2601
2553
 
2602
2554
 
@@ -2607,6 +2559,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2607
2559
 
2608
2560
 
2609
2561
 
2562
+ * @example
2563
+ * // Test all
2564
+ * const ts = new TreeSet<number>([2, 4, 6]);
2565
+ * console.log(ts.every(k => k > 0)); // true;
2566
+ */
2567
+ every(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
2568
+ /**
2569
+ * Test whether any value satisfies a predicate.
2570
+ * @remarks Time O(n), Space O(1)
2610
2571
 
2611
2572
 
2612
2573
 
@@ -2628,37 +2589,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2628
2589
 
2629
2590
 
2630
2591
 
2631
- * @example
2632
- * // Student grade ranking with custom comparator
2633
- * interface Student {
2634
- * name: string;
2635
- * gpa: number;
2636
- * }
2637
- *
2638
- * const ranking = new TreeSet<Student>(
2639
- * [
2640
- * { name: 'Alice', gpa: 3.8 },
2641
- * { name: 'Bob', gpa: 3.5 },
2642
- * { name: 'Charlie', gpa: 3.9 },
2643
- * { name: 'Diana', gpa: 3.5 }
2644
- * ],
2645
- * { comparator: (a, b) => b.gpa - a.gpa || a.name.localeCompare(b.name) }
2646
- * );
2647
- *
2648
- * // Sorted by GPA descending, then name ascending
2649
- * const names = [...ranking].map(s => s.name);
2650
- * console.log(names); // ['Charlie', 'Alice', 'Bob', 'Diana'];
2651
- *
2652
- * // Top student
2653
- * console.log(ranking.first()?.name); // 'Charlie';
2654
- *
2655
- * // Filter students with GPA >= 3.8
2656
- * const honors = ranking.filter(s => s.gpa >= 3.8);
2657
- * console.log(honors.toArray().map(s => s.name)); // ['Charlie', 'Alice'];
2658
- */
2659
- first(): K | undefined;
2660
- /**
2661
- * Largest key in the set.
2662
2592
 
2663
2593
 
2664
2594
 
@@ -2690,15 +2620,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2690
2620
 
2691
2621
 
2692
2622
 
2693
- * @example
2694
- * // Get the maximum element
2695
- * const temps = new TreeSet<number>([18, 22, 15, 30, 25]);
2696
- * console.log(temps.last()); // 30;
2697
- * console.log(temps.first()); // 15;
2698
- */
2699
- last(): K | undefined;
2700
- /**
2701
- * Remove and return the smallest key.
2702
2623
 
2703
2624
 
2704
2625
 
@@ -2730,17 +2651,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2730
2651
 
2731
2652
 
2732
2653
 
2733
- * @example
2734
- * // Remove and return minimum
2735
- * const queue = new TreeSet<number>([5, 1, 8, 3]);
2736
- *
2737
- * console.log(queue.pollFirst()); // 1;
2738
- * console.log(queue.pollFirst()); // 3;
2739
- * console.log(queue.size); // 2;
2740
- */
2741
- pollFirst(): K | undefined;
2742
- /**
2743
- * Remove and return the largest key.
2744
2654
 
2745
2655
 
2746
2656
 
@@ -2772,16 +2682,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2772
2682
 
2773
2683
 
2774
2684
 
2775
- * @example
2776
- * // Remove and return maximum
2777
- * const stack = new TreeSet<number>([10, 20, 30]);
2778
- *
2779
- * console.log(stack.pollLast()); // 30;
2780
- * console.log(stack.size); // 2;
2781
- */
2782
- pollLast(): K | undefined;
2783
- /**
2784
- * Smallest key that is >= the given key.
2785
2685
 
2786
2686
 
2787
2687
 
@@ -2844,6 +2744,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2844
2744
 
2845
2745
 
2846
2746
 
2747
+ * @example
2748
+ * // Test any
2749
+ * const ts = new TreeSet<number>([1, 3, 5]);
2750
+ * console.log(ts.some(k => k === 3)); // true;
2751
+ */
2752
+ some(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): boolean;
2753
+ /**
2754
+ * Find the first value that satisfies a predicate.
2755
+ * @remarks Time O(n), Space O(1)
2756
+
2757
+
2847
2758
 
2848
2759
 
2849
2760
 
@@ -2900,26 +2811,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
2900
2811
 
2901
2812
 
2902
2813
 
2903
- * @example
2904
- * // Finding nearest available time slot
2905
- * // Available appointment times (minutes from midnight)
2906
- * const slots = new TreeSet<number>([540, 600, 660, 720, 840, 900]);
2907
- *
2908
- * // Customer wants something around 10:30 (630 min)
2909
- * const nearest = slots.ceiling(630);
2910
- * console.log(nearest); // 660; // 11:00 AM
2911
- *
2912
- * // What's the latest slot before 2:00 PM (840)?
2913
- * const before2pm = slots.lower(840);
2914
- * console.log(before2pm); // 720; // 12:00 PM
2915
- *
2916
- * // Book the 11:00 slot
2917
- * slots.delete(660);
2918
- * console.log(slots.ceiling(630)); // 720;
2919
- */
2920
- ceiling(key: K): K | undefined;
2921
- /**
2922
- * Largest key that is <= the given key.
2923
2814
 
2924
2815
 
2925
2816
 
@@ -3039,17 +2930,15 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
3039
2930
 
3040
2931
 
3041
2932
  * @example
3042
- * // Largest element ≤ target
3043
- * const breakpoints = new TreeSet<number>([320, 768, 1024, 1280, 1920]);
3044
- *
3045
- * // Current width is 800 → which breakpoint applies?
3046
- * console.log(breakpoints.floor(800)); // 768;
3047
- * console.log(breakpoints.floor(1024)); // 1024; // exact match
3048
- * console.log(breakpoints.floor(100)); // undefined;
2933
+ * // Find entry
2934
+ * const ts = new TreeSet<number>([1, 2, 3]);
2935
+ * const found = ts.find(k => k === 2);
2936
+ * console.log(found); // 2;
3049
2937
  */
3050
- floor(key: K): K | undefined;
2938
+ find(callbackfn: TreeSetElementCallback<K, boolean, TreeSet<K>>, thisArg?: unknown): K | undefined;
3051
2939
  /**
3052
- * Smallest key that is > the given key.
2940
+ * Materialize the set into an array of keys.
2941
+ * @remarks Time O(n), Space O(n)
3053
2942
 
3054
2943
 
3055
2944
 
@@ -3168,16 +3057,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
3168
3057
 
3169
3058
 
3170
3059
 
3171
- * @example
3172
- * // Smallest element strictly > target
3173
- * const levels = new TreeSet<number>([1, 5, 10, 25, 50, 100]);
3174
- *
3175
- * console.log(levels.higher(10)); // 25;
3176
- * console.log(levels.higher(100)); // undefined;
3177
- */
3178
- higher(key: K): K | undefined;
3179
- /**
3180
- * Largest key that is < the given key.
3181
3060
 
3182
3061
 
3183
3062
 
@@ -3238,6 +3117,17 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
3238
3117
 
3239
3118
 
3240
3119
 
3120
+ * @example
3121
+ * // Convert to array
3122
+ * const ts = new TreeSet<number>([3, 1, 2]);
3123
+ * console.log(ts.toArray()); // [1, 2, 3];
3124
+ */
3125
+ toArray(): K[];
3126
+ /**
3127
+ * Print a human-friendly representation.
3128
+ * @remarks Time O(n), Space O(n)
3129
+
3130
+
3241
3131
 
3242
3132
 
3243
3133
 
@@ -3296,19 +3186,6 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
3296
3186
 
3297
3187
 
3298
3188
 
3299
- * @example
3300
- * // Largest element strictly < target
3301
- * const tiers = new TreeSet<number>([100, 200, 500, 1000]);
3302
- *
3303
- * console.log(tiers.lower(500)); // 200;
3304
- * console.log(tiers.lower(100)); // undefined;
3305
- */
3306
- lower(key: K): K | undefined;
3307
- /**
3308
- * Return all keys in a given range.
3309
- *
3310
- * @param range `[low, high]`
3311
- * @param options Inclusive/exclusive bounds (defaults to inclusive).
3312
3189
 
3313
3190
 
3314
3191
 
@@ -3428,28 +3305,1155 @@ export declare class TreeSet<K = any, R = K> implements Iterable<K> {
3428
3305
 
3429
3306
 
3430
3307
  * @example
3431
- * // IP address blocklist with range checking
3432
- * // Simplified: use numeric IP representation
3433
- * const blocklist = new TreeSet<number>([
3434
- * 167772160, // 10.0.0.0
3435
- * 167772416, // 10.0.1.0
3436
- * 167772672, // 10.0.2.0
3437
- * 167773184 // 10.0.4.0
3438
- * ]);
3439
- *
3440
- * // Check if any blocked IP is in range 10.0.1.0 - 10.0.3.0
3441
- * const inRange = blocklist.rangeSearch([167772416, 167772928]);
3442
- * console.log(inRange); // [167772416, 167772672];
3443
- *
3444
- * // Quick membership check
3445
- * console.log(blocklist.has(167772416)); // true;
3446
- * console.log(blocklist.has(167772800)); // false;
3308
+ * // Display tree
3309
+ * const ts = new TreeSet<number>([1, 2, 3]);
3310
+ * expect(() => ts.print()).not.toThrow();
3447
3311
  */
3448
- rangeSearch(range: [K, K], options?: TreeSetRangeOptions): K[];
3312
+ print(): void;
3449
3313
  /**
3450
- * Creates a shallow clone of this set.
3451
- * @remarks Time O(n log n), Space O(n)
3452
-
3314
+ * Smallest key in the set.
3315
+
3316
+
3317
+
3318
+
3319
+
3320
+
3321
+
3322
+
3323
+
3324
+
3325
+
3326
+
3327
+
3328
+
3329
+
3330
+
3331
+
3332
+
3333
+
3334
+
3335
+
3336
+
3337
+
3338
+
3339
+
3340
+
3341
+
3342
+
3343
+
3344
+
3345
+
3346
+
3347
+
3348
+
3349
+
3350
+
3351
+
3352
+
3353
+
3354
+ * @example
3355
+ * // Student grade ranking with custom comparator
3356
+ * interface Student {
3357
+ * name: string;
3358
+ * gpa: number;
3359
+ * }
3360
+ *
3361
+ * const ranking = new TreeSet<Student>(
3362
+ * [
3363
+ * { name: 'Alice', gpa: 3.8 },
3364
+ * { name: 'Bob', gpa: 3.5 },
3365
+ * { name: 'Charlie', gpa: 3.9 },
3366
+ * { name: 'Diana', gpa: 3.5 }
3367
+ * ],
3368
+ * { comparator: (a, b) => b.gpa - a.gpa || a.name.localeCompare(b.name) }
3369
+ * );
3370
+ *
3371
+ * // Sorted by GPA descending, then name ascending
3372
+ * const names = [...ranking].map(s => s.name);
3373
+ * console.log(names); // ['Charlie', 'Alice', 'Bob', 'Diana'];
3374
+ *
3375
+ * // Top student
3376
+ * console.log(ranking.first()?.name); // 'Charlie';
3377
+ *
3378
+ * // Filter students with GPA >= 3.8
3379
+ * const honors = ranking.filter(s => s.gpa >= 3.8);
3380
+ * console.log(honors.toArray().map(s => s.name)); // ['Charlie', 'Alice'];
3381
+ */
3382
+ first(): K | undefined;
3383
+ /**
3384
+ * Largest key in the set.
3385
+
3386
+
3387
+
3388
+
3389
+
3390
+
3391
+
3392
+
3393
+
3394
+
3395
+
3396
+
3397
+
3398
+
3399
+
3400
+
3401
+
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
3411
+
3412
+
3413
+
3414
+
3415
+
3416
+
3417
+
3418
+
3419
+
3420
+
3421
+
3422
+
3423
+
3424
+ * @example
3425
+ * // Get the maximum element
3426
+ * const temps = new TreeSet<number>([18, 22, 15, 30, 25]);
3427
+ * console.log(temps.last()); // 30;
3428
+ * console.log(temps.first()); // 15;
3429
+ */
3430
+ last(): K | undefined;
3431
+ /**
3432
+ * Remove and return the smallest key.
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+
3439
+
3440
+
3441
+
3442
+
3443
+
3444
+
3445
+
3446
+
3447
+
3448
+
3449
+
3450
+
3451
+
3452
+
3453
+
3454
+
3455
+
3456
+
3457
+
3458
+
3459
+
3460
+
3461
+
3462
+
3463
+
3464
+
3465
+
3466
+
3467
+
3468
+
3469
+
3470
+
3471
+
3472
+ * @example
3473
+ * // Remove and return minimum
3474
+ * const queue = new TreeSet<number>([5, 1, 8, 3]);
3475
+ *
3476
+ * console.log(queue.pollFirst()); // 1;
3477
+ * console.log(queue.pollFirst()); // 3;
3478
+ * console.log(queue.size); // 2;
3479
+ */
3480
+ pollFirst(): K | undefined;
3481
+ /**
3482
+ * Remove and return the largest key.
3483
+
3484
+
3485
+
3486
+
3487
+
3488
+
3489
+
3490
+
3491
+
3492
+
3493
+
3494
+
3495
+
3496
+
3497
+
3498
+
3499
+
3500
+
3501
+
3502
+
3503
+
3504
+
3505
+
3506
+
3507
+
3508
+
3509
+
3510
+
3511
+
3512
+
3513
+
3514
+
3515
+
3516
+
3517
+
3518
+
3519
+
3520
+
3521
+
3522
+ * @example
3523
+ * // Remove and return maximum
3524
+ * const stack = new TreeSet<number>([10, 20, 30]);
3525
+ *
3526
+ * console.log(stack.pollLast()); // 30;
3527
+ * console.log(stack.size); // 2;
3528
+ */
3529
+ pollLast(): K | undefined;
3530
+ /**
3531
+ * Smallest key that is >= the given key.
3532
+
3533
+
3534
+
3535
+
3536
+
3537
+
3538
+
3539
+
3540
+
3541
+
3542
+
3543
+
3544
+
3545
+
3546
+
3547
+
3548
+
3549
+
3550
+
3551
+
3552
+
3553
+
3554
+
3555
+
3556
+
3557
+
3558
+
3559
+
3560
+
3561
+
3562
+
3563
+
3564
+
3565
+
3566
+
3567
+
3568
+
3569
+
3570
+
3571
+
3572
+
3573
+
3574
+
3575
+
3576
+
3577
+
3578
+
3579
+
3580
+
3581
+
3582
+
3583
+
3584
+
3585
+
3586
+
3587
+
3588
+
3589
+
3590
+
3591
+
3592
+
3593
+
3594
+
3595
+
3596
+
3597
+
3598
+
3599
+
3600
+
3601
+
3602
+
3603
+
3604
+
3605
+
3606
+
3607
+
3608
+
3609
+
3610
+
3611
+
3612
+
3613
+
3614
+
3615
+
3616
+
3617
+
3618
+
3619
+
3620
+
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3627
+
3628
+
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3636
+
3637
+
3638
+
3639
+
3640
+
3641
+
3642
+
3643
+
3644
+
3645
+
3646
+
3647
+
3648
+
3649
+
3650
+
3651
+
3652
+
3653
+
3654
+
3655
+
3656
+
3657
+
3658
+
3659
+
3660
+
3661
+
3662
+
3663
+
3664
+
3665
+
3666
+
3667
+
3668
+
3669
+
3670
+
3671
+
3672
+
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3679
+
3680
+
3681
+
3682
+ * @example
3683
+ * // Finding nearest available time slot
3684
+ * // Available appointment times (minutes from midnight)
3685
+ * const slots = new TreeSet<number>([540, 600, 660, 720, 840, 900]);
3686
+ *
3687
+ * // Customer wants something around 10:30 (630 min)
3688
+ * const nearest = slots.ceiling(630);
3689
+ * console.log(nearest); // 660; // 11:00 AM
3690
+ *
3691
+ * // What's the latest slot before 2:00 PM (840)?
3692
+ * const before2pm = slots.lower(840);
3693
+ * console.log(before2pm); // 720; // 12:00 PM
3694
+ *
3695
+ * // Book the 11:00 slot
3696
+ * slots.delete(660);
3697
+ * console.log(slots.ceiling(630)); // 720;
3698
+ */
3699
+ ceiling(key: K): K | undefined;
3700
+ /**
3701
+ * Largest key that is <= the given key.
3702
+
3703
+
3704
+
3705
+
3706
+
3707
+
3708
+
3709
+
3710
+
3711
+
3712
+
3713
+
3714
+
3715
+
3716
+
3717
+
3718
+
3719
+
3720
+
3721
+
3722
+
3723
+
3724
+
3725
+
3726
+
3727
+
3728
+
3729
+
3730
+
3731
+
3732
+
3733
+
3734
+
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+
3746
+
3747
+
3748
+
3749
+
3750
+
3751
+
3752
+
3753
+
3754
+
3755
+
3756
+
3757
+
3758
+
3759
+
3760
+
3761
+
3762
+
3763
+
3764
+
3765
+
3766
+
3767
+
3768
+
3769
+
3770
+
3771
+
3772
+
3773
+
3774
+
3775
+
3776
+
3777
+
3778
+
3779
+
3780
+
3781
+
3782
+
3783
+
3784
+
3785
+
3786
+
3787
+
3788
+
3789
+
3790
+
3791
+
3792
+
3793
+
3794
+
3795
+
3796
+
3797
+
3798
+
3799
+
3800
+
3801
+
3802
+
3803
+
3804
+
3805
+
3806
+
3807
+
3808
+
3809
+
3810
+
3811
+
3812
+
3813
+
3814
+
3815
+
3816
+
3817
+
3818
+
3819
+
3820
+
3821
+
3822
+
3823
+
3824
+
3825
+
3826
+
3827
+
3828
+
3829
+
3830
+
3831
+
3832
+
3833
+
3834
+
3835
+
3836
+
3837
+
3838
+
3839
+
3840
+
3841
+
3842
+
3843
+
3844
+
3845
+
3846
+
3847
+
3848
+
3849
+
3850
+
3851
+
3852
+ * @example
3853
+ * // Largest element ≤ target
3854
+ * const breakpoints = new TreeSet<number>([320, 768, 1024, 1280, 1920]);
3855
+ *
3856
+ * // Current width is 800 → which breakpoint applies?
3857
+ * console.log(breakpoints.floor(800)); // 768;
3858
+ * console.log(breakpoints.floor(1024)); // 1024; // exact match
3859
+ * console.log(breakpoints.floor(100)); // undefined;
3860
+ */
3861
+ floor(key: K): K | undefined;
3862
+ /**
3863
+ * Smallest key that is > the given key.
3864
+
3865
+
3866
+
3867
+
3868
+
3869
+
3870
+
3871
+
3872
+
3873
+
3874
+
3875
+
3876
+
3877
+
3878
+
3879
+
3880
+
3881
+
3882
+
3883
+
3884
+
3885
+
3886
+
3887
+
3888
+
3889
+
3890
+
3891
+
3892
+
3893
+
3894
+
3895
+
3896
+
3897
+
3898
+
3899
+
3900
+
3901
+
3902
+
3903
+
3904
+
3905
+
3906
+
3907
+
3908
+
3909
+
3910
+
3911
+
3912
+
3913
+
3914
+
3915
+
3916
+
3917
+
3918
+
3919
+
3920
+
3921
+
3922
+
3923
+
3924
+
3925
+
3926
+
3927
+
3928
+
3929
+
3930
+
3931
+
3932
+
3933
+
3934
+
3935
+
3936
+
3937
+
3938
+
3939
+
3940
+
3941
+
3942
+
3943
+
3944
+
3945
+
3946
+
3947
+
3948
+
3949
+
3950
+
3951
+
3952
+
3953
+
3954
+
3955
+
3956
+
3957
+
3958
+
3959
+
3960
+
3961
+
3962
+
3963
+
3964
+
3965
+
3966
+
3967
+
3968
+
3969
+
3970
+
3971
+
3972
+
3973
+
3974
+
3975
+
3976
+
3977
+
3978
+
3979
+
3980
+
3981
+
3982
+
3983
+
3984
+
3985
+
3986
+
3987
+
3988
+
3989
+
3990
+
3991
+
3992
+
3993
+
3994
+
3995
+
3996
+
3997
+
3998
+
3999
+
4000
+
4001
+
4002
+
4003
+
4004
+
4005
+
4006
+
4007
+
4008
+
4009
+
4010
+
4011
+
4012
+
4013
+
4014
+ * @example
4015
+ * // Smallest element strictly > target
4016
+ * const levels = new TreeSet<number>([1, 5, 10, 25, 50, 100]);
4017
+ *
4018
+ * console.log(levels.higher(10)); // 25;
4019
+ * console.log(levels.higher(100)); // undefined;
4020
+ */
4021
+ higher(key: K): K | undefined;
4022
+ /**
4023
+ * Largest key that is < the given key.
4024
+
4025
+
4026
+
4027
+
4028
+
4029
+
4030
+
4031
+
4032
+
4033
+
4034
+
4035
+
4036
+
4037
+
4038
+
4039
+
4040
+
4041
+
4042
+
4043
+
4044
+
4045
+
4046
+
4047
+
4048
+
4049
+
4050
+
4051
+
4052
+
4053
+
4054
+
4055
+
4056
+
4057
+
4058
+
4059
+
4060
+
4061
+
4062
+
4063
+
4064
+
4065
+
4066
+
4067
+
4068
+
4069
+
4070
+
4071
+
4072
+
4073
+
4074
+
4075
+
4076
+
4077
+
4078
+
4079
+
4080
+
4081
+
4082
+
4083
+
4084
+
4085
+
4086
+
4087
+
4088
+
4089
+
4090
+
4091
+
4092
+
4093
+
4094
+
4095
+
4096
+
4097
+
4098
+
4099
+
4100
+
4101
+
4102
+
4103
+
4104
+
4105
+
4106
+
4107
+
4108
+
4109
+
4110
+
4111
+
4112
+
4113
+
4114
+
4115
+
4116
+
4117
+
4118
+
4119
+
4120
+
4121
+
4122
+
4123
+
4124
+
4125
+
4126
+
4127
+
4128
+
4129
+
4130
+
4131
+
4132
+
4133
+
4134
+
4135
+
4136
+
4137
+
4138
+
4139
+
4140
+
4141
+
4142
+
4143
+
4144
+
4145
+
4146
+
4147
+
4148
+
4149
+
4150
+
4151
+
4152
+
4153
+
4154
+
4155
+
4156
+
4157
+
4158
+
4159
+
4160
+
4161
+
4162
+
4163
+
4164
+
4165
+
4166
+
4167
+
4168
+
4169
+
4170
+
4171
+
4172
+
4173
+
4174
+ * @example
4175
+ * // Largest element strictly < target
4176
+ * const tiers = new TreeSet<number>([100, 200, 500, 1000]);
4177
+ *
4178
+ * console.log(tiers.lower(500)); // 200;
4179
+ * console.log(tiers.lower(100)); // undefined;
4180
+ */
4181
+ lower(key: K): K | undefined;
4182
+ /**
4183
+ * Return all keys in a given range.
4184
+ *
4185
+ * @param range `[low, high]`
4186
+ * @param options Inclusive/exclusive bounds (defaults to inclusive).
4187
+
4188
+
4189
+
4190
+
4191
+
4192
+
4193
+
4194
+
4195
+
4196
+
4197
+
4198
+
4199
+
4200
+
4201
+
4202
+
4203
+
4204
+
4205
+
4206
+
4207
+
4208
+
4209
+
4210
+
4211
+
4212
+
4213
+
4214
+
4215
+
4216
+
4217
+
4218
+
4219
+
4220
+
4221
+
4222
+
4223
+
4224
+
4225
+
4226
+
4227
+
4228
+
4229
+
4230
+
4231
+
4232
+
4233
+
4234
+
4235
+
4236
+
4237
+
4238
+
4239
+
4240
+
4241
+
4242
+
4243
+
4244
+
4245
+
4246
+
4247
+
4248
+
4249
+
4250
+
4251
+
4252
+
4253
+
4254
+
4255
+
4256
+
4257
+
4258
+
4259
+
4260
+
4261
+
4262
+
4263
+
4264
+
4265
+
4266
+
4267
+
4268
+
4269
+
4270
+
4271
+
4272
+
4273
+
4274
+
4275
+
4276
+
4277
+
4278
+
4279
+
4280
+
4281
+
4282
+
4283
+
4284
+
4285
+
4286
+
4287
+
4288
+
4289
+
4290
+
4291
+
4292
+
4293
+
4294
+
4295
+
4296
+
4297
+
4298
+
4299
+
4300
+
4301
+
4302
+
4303
+
4304
+
4305
+
4306
+
4307
+
4308
+
4309
+
4310
+
4311
+
4312
+
4313
+
4314
+
4315
+
4316
+
4317
+
4318
+
4319
+
4320
+
4321
+
4322
+
4323
+
4324
+
4325
+
4326
+
4327
+
4328
+
4329
+
4330
+
4331
+
4332
+
4333
+
4334
+
4335
+
4336
+
4337
+ * @example
4338
+ * // IP address blocklist with range checking
4339
+ * // Simplified: use numeric IP representation
4340
+ * const blocklist = new TreeSet<number>([
4341
+ * 167772160, // 10.0.0.0
4342
+ * 167772416, // 10.0.1.0
4343
+ * 167772672, // 10.0.2.0
4344
+ * 167773184 // 10.0.4.0
4345
+ * ]);
4346
+ *
4347
+ * // Check if any blocked IP is in range 10.0.1.0 - 10.0.3.0
4348
+ * const inRange = blocklist.rangeSearch([167772416, 167772928]);
4349
+ * console.log(inRange); // [167772416, 167772672];
4350
+ *
4351
+ * // Quick membership check
4352
+ * console.log(blocklist.has(167772416)); // true;
4353
+ * console.log(blocklist.has(167772800)); // false;
4354
+ */
4355
+ rangeSearch(range: [K, K], options?: TreeSetRangeOptions): K[];
4356
+ /**
4357
+ * Returns the element at the k-th position in tree order (0-indexed).
4358
+ * @remarks Time O(log n). Requires `enableOrderStatistic: true`.
4359
+
4360
+
4361
+
4362
+ * @example
4363
+ * // Find k-th element in a TreeSet
4364
+ * const set = new TreeSet<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
4365
+ * console.log(set.getByRank(0)); // 10;
4366
+ * console.log(set.getByRank(2)); // 30;
4367
+ * console.log(set.getRank(30)); // 2;
4368
+ */
4369
+ getByRank(k: number): K | undefined;
4370
+ /**
4371
+ * Returns the 0-based rank of a key (number of elements that precede it in tree order).
4372
+ * @remarks Time O(log n). Requires `enableOrderStatistic: true`.
4373
+ * @example
4374
+ * // Get the rank of a key in sorted order
4375
+ * const tree = new TreeSet<number>(
4376
+ * [10, 20, 30, 40, 50],
4377
+ * { enableOrderStatistic: true }
4378
+ * );
4379
+ * console.log(tree.getRank(10)); // 0; // smallest → rank 0
4380
+ * console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
4381
+ * console.log(tree.getRank(50)); // 4; // largest → rank 4
4382
+ * console.log(tree.getRank(25)); // 2;
4383
+ */
4384
+ getRank(key: K): number;
4385
+ /**
4386
+ * Returns elements by rank range (0-indexed, inclusive on both ends).
4387
+ * @remarks Time O(log n + k). Requires `enableOrderStatistic: true`.
4388
+
4389
+
4390
+
4391
+
4392
+
4393
+
4394
+
4395
+
4396
+
4397
+ * @example
4398
+ * // Pagination by position in tree order
4399
+ * const tree = new TreeSet<number>(
4400
+ * [10, 20, 30, 40, 50, 60, 70, 80, 90],
4401
+ * { enableOrderStatistic: true }
4402
+ * );
4403
+ * const pageSize = 3;
4404
+ *
4405
+ * // Page 1
4406
+ * console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
4407
+ * // Page 2
4408
+ * console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
4409
+ * // Page 3
4410
+ * console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
4411
+ */
4412
+ rangeByRank(start: number, end: number): K[];
4413
+ /**
4414
+ * Creates a shallow clone of this set.
4415
+ * @remarks Time O(n log n), Space O(n)
4416
+
4417
+
4418
+
4419
+
4420
+
4421
+
4422
+
4423
+
4424
+
4425
+
4426
+
4427
+
4428
+
4429
+
4430
+
4431
+
4432
+
4433
+
4434
+
4435
+
4436
+
4437
+
4438
+
4439
+
4440
+
4441
+
4442
+
4443
+
4444
+
4445
+
4446
+
4447
+
4448
+
4449
+
4450
+
4451
+
4452
+
4453
+
4454
+
4455
+
4456
+
3453
4457
 
3454
4458
 
3455
4459