max-priority-queue-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 (94) hide show
  1. package/README.md +63 -0
  2. package/dist/cjs/index.cjs +694 -119
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs-legacy/index.cjs +693 -118
  5. package/dist/cjs-legacy/index.cjs.map +1 -1
  6. package/dist/esm/index.mjs +694 -119
  7. package/dist/esm/index.mjs.map +1 -1
  8. package/dist/esm-legacy/index.mjs +693 -118
  9. package/dist/esm-legacy/index.mjs.map +1 -1
  10. package/dist/types/data-structures/base/index.d.ts +1 -0
  11. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  12. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  13. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  14. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +380 -51
  15. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +487 -147
  16. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +956 -80
  17. package/dist/types/data-structures/binary-tree/bst.d.ts +816 -29
  18. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +610 -31
  19. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +326 -135
  20. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3781 -6
  21. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3607 -201
  22. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2874 -65
  23. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3528 -6
  24. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  25. package/dist/types/data-structures/graph/directed-graph.d.ts +429 -47
  26. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  27. package/dist/types/data-structures/graph/undirected-graph.d.ts +393 -59
  28. package/dist/types/data-structures/hash/hash-map.d.ts +473 -89
  29. package/dist/types/data-structures/heap/heap.d.ts +581 -99
  30. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  31. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  32. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +646 -47
  33. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +596 -68
  34. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +793 -12
  35. package/dist/types/data-structures/matrix/matrix.d.ts +499 -0
  36. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  37. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  38. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  39. package/dist/types/data-structures/queue/deque.d.ts +593 -71
  40. package/dist/types/data-structures/queue/queue.d.ts +463 -42
  41. package/dist/types/data-structures/stack/stack.d.ts +384 -32
  42. package/dist/types/data-structures/trie/trie.d.ts +470 -48
  43. package/dist/types/interfaces/graph.d.ts +1 -1
  44. package/dist/types/types/common.d.ts +2 -2
  45. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  46. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  47. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  48. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  49. package/dist/types/types/utils/validate-type.d.ts +4 -4
  50. package/dist/umd/max-priority-queue-typed.js +691 -116
  51. package/dist/umd/max-priority-queue-typed.js.map +1 -1
  52. package/dist/umd/max-priority-queue-typed.min.js +1 -1
  53. package/dist/umd/max-priority-queue-typed.min.js.map +1 -1
  54. package/package.json +2 -2
  55. package/src/data-structures/base/index.ts +1 -0
  56. package/src/data-structures/base/iterable-element-base.ts +4 -5
  57. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  58. package/src/data-structures/base/linear-base.ts +3 -3
  59. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  60. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  61. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  62. package/src/data-structures/binary-tree/bst.ts +840 -35
  63. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  64. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  65. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  66. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  67. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  68. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  69. package/src/data-structures/graph/abstract-graph.ts +4 -4
  70. package/src/data-structures/graph/directed-graph.ts +429 -47
  71. package/src/data-structures/graph/map-graph.ts +59 -1
  72. package/src/data-structures/graph/undirected-graph.ts +393 -59
  73. package/src/data-structures/hash/hash-map.ts +476 -92
  74. package/src/data-structures/heap/heap.ts +581 -99
  75. package/src/data-structures/heap/max-heap.ts +46 -0
  76. package/src/data-structures/heap/min-heap.ts +59 -0
  77. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  78. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  79. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  80. package/src/data-structures/matrix/matrix.ts +584 -12
  81. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  82. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  83. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  84. package/src/data-structures/queue/deque.ts +592 -70
  85. package/src/data-structures/queue/queue.ts +463 -42
  86. package/src/data-structures/stack/stack.ts +384 -32
  87. package/src/data-structures/trie/trie.ts +470 -48
  88. package/src/interfaces/graph.ts +1 -1
  89. package/src/types/common.ts +2 -2
  90. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  91. package/src/types/data-structures/heap/heap.ts +1 -0
  92. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  93. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  94. package/src/types/utils/validate-type.ts +4 -4
@@ -1,27 +1,808 @@
1
- import type { SkipLinkedListOptions } from '../../types';
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Pablo Zeng
5
+ * @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
6
+ * @license MIT License
7
+ */
8
+ import type { Comparator, EntryCallback } from '../../types';
9
+ import { IterableEntryBase } from '../base';
2
10
  export declare class SkipListNode<K, V> {
3
11
  key: K;
4
12
  value: V;
5
- forward: SkipListNode<K, V>[];
13
+ forward: (SkipListNode<K, V> | undefined)[];
6
14
  constructor(key: K, value: V, level: number);
7
15
  }
8
- export declare class SkipList<K, V> {
9
- constructor(elements?: Iterable<[K, V]>, options?: SkipLinkedListOptions);
16
+ export type SkipListOptions<K, V, R = [K, V]> = {
17
+ comparator?: Comparator<K>;
18
+ toEntryFn?: (rawElement: R) => [K, V];
19
+ maxLevel?: number;
20
+ probability?: number;
21
+ };
22
+ export type SkipListRangeOptions = {
23
+ lowInclusive?: boolean;
24
+ highInclusive?: boolean;
25
+ };
26
+ /**
27
+ * SkipList — a probabilistic sorted key-value container.
28
+ *
29
+ * API mirrors TreeMap: users can swap `TreeMap` ↔ `SkipList` with zero code changes.
30
+ * Reference: Java ConcurrentSkipListMap (NavigableMap interface).
31
+ *
32
+ * @example
33
+ * // Display skip list
34
+ * const sl = new SkipList<number, string>([[1, 'a']]);
35
+ * expect(() => sl.print()).not.toThrow();
36
+ */
37
+ export declare class SkipList<K = any, V = any, R = [K, V]> extends IterableEntryBase<K, V | undefined> {
38
+ #private;
39
+ constructor(entries?: Iterable<R> | Iterable<[K, V | undefined]>, options?: SkipListOptions<K, V, R>);
40
+ /**
41
+ * Creates a default comparator supporting number, string, Date, and bigint.
42
+ */
43
+ static createDefaultComparator<K>(): Comparator<K>;
10
44
  protected _head: SkipListNode<K, V>;
11
- get head(): SkipListNode<K, V>;
12
45
  protected _level: number;
13
- get level(): number;
46
+ protected _size: number;
14
47
  protected _maxLevel: number;
15
- get maxLevel(): number;
16
48
  protected _probability: number;
49
+ get size(): number;
50
+ get maxLevel(): number;
17
51
  get probability(): number;
18
- get first(): V | undefined;
19
- get last(): V | undefined;
20
- add(key: K, value: V): void;
52
+ get comparator(): Comparator<K>;
53
+ /**
54
+ * Check if empty
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+ * @example
85
+ * // Check if empty
86
+ * const sl = new SkipList<number, string>();
87
+ * console.log(sl.isEmpty()); // true;
88
+ */
89
+ isEmpty(): boolean;
90
+ /**
91
+ * Remove all entries
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+ * @example
122
+ * // Remove all entries
123
+ * const sl = new SkipList<number, string>([[1, 'a'], [2, 'b']]);
124
+ * sl.clear();
125
+ * console.log(sl.isEmpty()); // true;
126
+ */
127
+ clear(): void;
128
+ /**
129
+ * Create independent copy
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+ * @example
160
+ * // Create independent copy
161
+ * const sl = new SkipList<number, string>([[1, 'a'], [2, 'b']]);
162
+ * const copy = sl.clone();
163
+ * copy.delete(1);
164
+ * console.log(sl.has(1)); // true;
165
+ */
166
+ clone(): this;
167
+ /**
168
+ * Insert or update a key-value pair. Returns `this` for chaining.
169
+ * Unique keys only — if key exists, value is updated in place.
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+ * @example
203
+ * // In-memory sorted key-value store
204
+ * const store = new SkipList<number, string>();
205
+ *
206
+ * store.set(3, 'three');
207
+ * store.set(1, 'one');
208
+ * store.set(5, 'five');
209
+ * store.set(2, 'two');
210
+ *
211
+ * console.log(store.get(3)); // 'three';
212
+ * console.log(store.get(1)); // 'one';
213
+ * console.log(store.get(5)); // 'five';
214
+ *
215
+ * // Update existing key
216
+ * store.set(3, 'THREE');
217
+ * console.log(store.get(3)); // 'THREE';
218
+ */
219
+ set(key: K, value: V): this;
220
+ /**
221
+ * Get the value for a key, or `undefined` if not found.
222
+ * Overrides base O(n) with O(log n) skip-list search.
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
+ * @example
256
+ * // Building a sorted index
257
+ * type Product = { id: number; name: string; price: number };
258
+ * const products: Product[] = [
259
+ * { id: 1, name: 'Widget', price: 25 },
260
+ * { id: 2, name: 'Gadget', price: 50 },
261
+ * { id: 3, name: 'Doohickey', price: 15 }
262
+ * ];
263
+ *
264
+ * const index = new SkipList<number, Product, Product>(products, {
265
+ * toEntryFn: (p: Product) => [p.price, p]
266
+ * });
267
+ *
268
+ * // Iterate in sorted order by price
269
+ * const names = [...index.values()].map(p => p!.name);
270
+ * console.log(names); // ['Doohickey', 'Widget', 'Gadget'];
271
+ *
272
+ * // Range search: products between $20 and $60
273
+ * const range = index.rangeSearch([20, 60]);
274
+ * console.log(range.map(([, p]) => p!.name)); // ['Widget', 'Gadget'];
275
+ */
21
276
  get(key: K): V | undefined;
277
+ /**
278
+ * Check if a key exists.
279
+ * Overrides base O(n) with O(log n) skip-list search.
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
+ * @example
313
+ * // Check key existence
314
+ * const sl = new SkipList<number, string>([[1, 'a'], [3, 'c'], [5, 'e']]);
315
+ * console.log(sl.has(3)); // true;
316
+ * console.log(sl.has(4)); // false;
317
+ */
22
318
  has(key: K): boolean;
319
+ /**
320
+ * Delete a key. Returns `true` if the key was found and removed.
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
+ * @example
354
+ * // Fast lookup with deletion
355
+ * const cache = new SkipList<string, number>();
356
+ *
357
+ * cache.set('alpha', 1);
358
+ * cache.set('beta', 2);
359
+ * cache.set('gamma', 3);
360
+ *
361
+ * console.log(cache.has('beta')); // true;
362
+ * cache.delete('beta');
363
+ * console.log(cache.has('beta')); // false;
364
+ * console.log(cache.size); // 2;
365
+ */
23
366
  delete(key: K): boolean;
24
- higher(key: K): V | undefined;
25
- lower(key: K): V | undefined;
367
+ /**
368
+ * Returns the first (smallest key) entry, or `undefined` if empty.
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+ * @example
402
+ * // Access the minimum entry
403
+ * const sl = new SkipList<number, string>([[5, 'e'], [1, 'a'], [3, 'c']]);
404
+ * console.log(sl.first()); // [1, 'a'];
405
+ */
406
+ first(): [K, V | undefined] | undefined;
407
+ /**
408
+ * Returns the last (largest key) entry, or `undefined` if empty.
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
+ * @example
442
+ * // Access the maximum entry
443
+ * const sl = new SkipList<number, string>([[5, 'e'], [1, 'a'], [3, 'c']]);
444
+ * console.log(sl.last()); // [5, 'e'];
445
+ */
446
+ last(): [K, V | undefined] | undefined;
447
+ /**
448
+ * Remove and return the first (smallest key) entry.
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
+ * @example
479
+ * // Remove and return smallest
480
+ * const sl = new SkipList<number, string>([[1, 'a'], [2, 'b'], [3, 'c']]);
481
+ * console.log(sl.pollFirst()); // [1, 'a'];
482
+ * console.log(sl.size); // 2;
483
+ */
484
+ pollFirst(): [K, V | undefined] | undefined;
485
+ /**
486
+ * Remove and return the last (largest key) entry.
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
+ * @example
517
+ * // Remove and return largest
518
+ * const sl = new SkipList<number, string>([[1, 'a'], [2, 'b'], [3, 'c']]);
519
+ * console.log(sl.pollLast()); // [3, 'c'];
520
+ * console.log(sl.size); // 2;
521
+ */
522
+ pollLast(): [K, V | undefined] | undefined;
523
+ /**
524
+ * Least entry ≥ key, or `undefined`.
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
+ * @example
558
+ * // Least entry ≥ key
559
+ * const sl = new SkipList<number, string>([[10, 'a'], [20, 'b'], [30, 'c']]);
560
+ * console.log(sl.ceiling(15)); // [20, 'b'];
561
+ * console.log(sl.ceiling(20)); // [20, 'b'];
562
+ */
563
+ ceiling(key: K): [K, V | undefined] | undefined;
564
+ /**
565
+ * Greatest entry ≤ key, or `undefined`.
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
+ * @example
599
+ * // Greatest entry ≤ key
600
+ * const sl = new SkipList<number, string>([[10, 'a'], [20, 'b'], [30, 'c']]);
601
+ * console.log(sl.floor(25)); // [20, 'b'];
602
+ * console.log(sl.floor(5)); // undefined;
603
+ */
604
+ floor(key: K): [K, V | undefined] | undefined;
605
+ /**
606
+ * Least entry strictly > key, or `undefined`.
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
+ * @example
637
+ * // Strictly greater entry
638
+ * const sl = new SkipList<number, string>([[10, 'a'], [20, 'b'], [30, 'c']]);
639
+ * console.log(sl.higher(15)); // [20, 'b'];
640
+ * console.log(sl.higher(30)); // undefined;
641
+ */
642
+ higher(key: K): [K, V | undefined] | undefined;
643
+ /**
644
+ * Greatest entry strictly < key, or `undefined`.
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
+ * @example
675
+ * // Strictly less entry
676
+ * const sl = new SkipList<number, string>([[10, 'a'], [20, 'b'], [30, 'c']]);
677
+ * console.log(sl.lower(25)); // [20, 'b'];
678
+ * console.log(sl.lower(10)); // undefined;
679
+ */
680
+ lower(key: K): [K, V | undefined] | undefined;
681
+ /**
682
+ * Returns entries within the given key range.
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
+ * @example
716
+ * // Find entries in a range
717
+ * const sl = new SkipList<number, string>([[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd'], [5, 'e']]);
718
+ * const result = sl.rangeSearch([2, 4]);
719
+ * console.log(result); // [[2, 'b'], [3, 'c'], [4, 'd']];
720
+ */
721
+ rangeSearch(range: [K, K], options?: SkipListRangeOptions): Array<[K, V | undefined]>;
722
+ /**
723
+ * Creates a new SkipList with entries transformed by callback.
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
+ * @example
754
+ * // Transform entries
755
+ * const sl = new SkipList<number, string>([[1, 'a'], [2, 'b']]);
756
+ * const mapped = sl.map((v, k) => [k, v?.toUpperCase()] as [number, string]);
757
+ * console.log([...mapped.values()]); // ['A', 'B'];
758
+ */
759
+ map<MK, MV>(callback: EntryCallback<K, V | undefined, [MK, MV]>, options?: SkipListOptions<MK, MV>): SkipList<MK, MV>;
760
+ /**
761
+ * Creates a new SkipList with entries that pass the predicate.
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
+ * @example
792
+ * // Filter entries
793
+ * const sl = new SkipList<number, string>([[1, 'a'], [2, 'b'], [3, 'c']]);
794
+ * const result = sl.filter((v, k) => k > 1);
795
+ * console.log(result.size); // 2;
796
+ */
797
+ filter(callbackfn: EntryCallback<K, V | undefined, boolean>, thisArg?: unknown): this;
798
+ protected _getIterator(): IterableIterator<[K, V | undefined]>;
799
+ /**
800
+ * Finds the update array (predecessors at each level) for a given key.
801
+ */
802
+ protected _findUpdate(key: K): SkipListNode<K, V>[];
803
+ /**
804
+ * Finds the node for a given key, or undefined.
805
+ */
806
+ protected _findNode(key: K): SkipListNode<K, V> | undefined;
26
807
  protected _randomLevel(): number;
27
808
  }