binary-tree-typed 2.4.4 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +0 -84
  2. package/dist/cjs/index.cjs +965 -420
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs-legacy/index.cjs +962 -417
  5. package/dist/cjs-legacy/index.cjs.map +1 -1
  6. package/dist/esm/index.mjs +965 -421
  7. package/dist/esm/index.mjs.map +1 -1
  8. package/dist/esm-legacy/index.mjs +962 -418
  9. package/dist/esm-legacy/index.mjs.map +1 -1
  10. package/dist/types/common/error.d.ts +23 -0
  11. package/dist/types/common/index.d.ts +1 -0
  12. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  13. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +128 -51
  14. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +210 -164
  15. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +439 -78
  16. package/dist/types/data-structures/binary-tree/bst.d.ts +311 -28
  17. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +217 -31
  18. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +218 -152
  19. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1281 -5
  20. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1087 -201
  21. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +858 -65
  22. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1133 -5
  23. package/dist/types/data-structures/graph/abstract-graph.d.ts +44 -0
  24. package/dist/types/data-structures/graph/directed-graph.d.ts +220 -47
  25. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  26. package/dist/types/data-structures/graph/undirected-graph.d.ts +218 -59
  27. package/dist/types/data-structures/hash/hash-map.d.ts +230 -77
  28. package/dist/types/data-structures/heap/heap.d.ts +287 -99
  29. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  30. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  31. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +286 -44
  32. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +278 -65
  33. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +415 -12
  34. package/dist/types/data-structures/matrix/matrix.d.ts +331 -0
  35. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  36. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  37. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  38. package/dist/types/data-structures/queue/deque.d.ts +313 -66
  39. package/dist/types/data-structures/queue/queue.d.ts +211 -42
  40. package/dist/types/data-structures/stack/stack.d.ts +174 -32
  41. package/dist/types/data-structures/trie/trie.d.ts +213 -43
  42. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  43. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  44. package/dist/types/types/data-structures/queue/deque.d.ts +6 -0
  45. package/dist/umd/binary-tree-typed.js +959 -414
  46. package/dist/umd/binary-tree-typed.js.map +1 -1
  47. package/dist/umd/binary-tree-typed.min.js +3 -3
  48. package/dist/umd/binary-tree-typed.min.js.map +1 -1
  49. package/package.json +2 -2
  50. package/src/common/error.ts +60 -0
  51. package/src/common/index.ts +2 -0
  52. package/src/data-structures/base/iterable-element-base.ts +2 -2
  53. package/src/data-structures/binary-tree/avl-tree.ts +134 -51
  54. package/src/data-structures/binary-tree/binary-indexed-tree.ts +303 -247
  55. package/src/data-structures/binary-tree/binary-tree.ts +542 -121
  56. package/src/data-structures/binary-tree/bst.ts +346 -37
  57. package/src/data-structures/binary-tree/red-black-tree.ts +309 -96
  58. package/src/data-structures/binary-tree/segment-tree.ts +372 -248
  59. package/src/data-structures/binary-tree/tree-map.ts +1292 -13
  60. package/src/data-structures/binary-tree/tree-multi-map.ts +1098 -215
  61. package/src/data-structures/binary-tree/tree-multi-set.ts +863 -69
  62. package/src/data-structures/binary-tree/tree-set.ts +1143 -15
  63. package/src/data-structures/graph/abstract-graph.ts +106 -1
  64. package/src/data-structures/graph/directed-graph.ts +223 -47
  65. package/src/data-structures/graph/map-graph.ts +59 -1
  66. package/src/data-structures/graph/undirected-graph.ts +299 -59
  67. package/src/data-structures/hash/hash-map.ts +243 -79
  68. package/src/data-structures/heap/heap.ts +291 -102
  69. package/src/data-structures/heap/max-heap.ts +48 -3
  70. package/src/data-structures/heap/min-heap.ts +59 -0
  71. package/src/data-structures/linked-list/doubly-linked-list.ts +286 -44
  72. package/src/data-structures/linked-list/singly-linked-list.ts +278 -65
  73. package/src/data-structures/linked-list/skip-linked-list.ts +689 -90
  74. package/src/data-structures/matrix/matrix.ts +425 -22
  75. package/src/data-structures/priority-queue/max-priority-queue.ts +59 -3
  76. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  77. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  78. package/src/data-structures/queue/deque.ts +343 -68
  79. package/src/data-structures/queue/queue.ts +211 -42
  80. package/src/data-structures/stack/stack.ts +174 -32
  81. package/src/data-structures/trie/trie.ts +215 -44
  82. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  83. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  84. package/src/types/data-structures/queue/deque.ts +7 -0
  85. package/src/utils/utils.ts +4 -2
@@ -66,65 +66,6 @@ export declare class UndirectedEdge<E = number> extends AbstractEdge<E> {
66
66
  * console.log(neighborsA[0].key); // 'B';
67
67
  * console.log(neighborsA[1].key); // 'C';
68
68
  * @example
69
- * // UndirectedGraph deleteEdge and vertex operations
70
- * const graph = new UndirectedGraph<string>();
71
- *
72
- * // Build a simple undirected graph
73
- * graph.addVertex('X');
74
- * graph.addVertex('Y');
75
- * graph.addVertex('Z');
76
- * graph.addEdge('X', 'Y', 1);
77
- * graph.addEdge('Y', 'Z', 2);
78
- * graph.addEdge('X', 'Z', 3);
79
- *
80
- * // Delete an edge
81
- * graph.deleteEdge('X', 'Y');
82
- * console.log(graph.hasEdge('X', 'Y')); // false;
83
- *
84
- * // Bidirectional deletion confirmed
85
- * console.log(graph.hasEdge('Y', 'X')); // false;
86
- *
87
- * // Other edges should remain
88
- * console.log(graph.hasEdge('Y', 'Z')); // true;
89
- * console.log(graph.hasEdge('Z', 'Y')); // true;
90
- *
91
- * // Delete a vertex
92
- * graph.deleteVertex('Y');
93
- * console.log(graph.hasVertex('Y')); // false;
94
- * console.log(graph.size); // 2;
95
- * @example
96
- * // UndirectedGraph connectivity and neighbors
97
- * const graph = new UndirectedGraph<string>();
98
- *
99
- * // Build a friendship network
100
- * const people = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'];
101
- * for (const person of people) {
102
- * graph.addVertex(person);
103
- * }
104
- *
105
- * // Add friendships (undirected edges)
106
- * graph.addEdge('Alice', 'Bob', 1);
107
- * graph.addEdge('Alice', 'Charlie', 1);
108
- * graph.addEdge('Bob', 'Diana', 1);
109
- * graph.addEdge('Charlie', 'Eve', 1);
110
- * graph.addEdge('Diana', 'Eve', 1);
111
- *
112
- * // Get friends of each person
113
- * const aliceFriends = graph.getNeighbors('Alice');
114
- * console.log(aliceFriends[0].key); // 'Bob';
115
- * console.log(aliceFriends[1].key); // 'Charlie';
116
- * console.log(aliceFriends.length); // 2;
117
- *
118
- * const dianaFriends = graph.getNeighbors('Diana');
119
- * console.log(dianaFriends[0].key); // 'Bob';
120
- * console.log(dianaFriends[1].key); // 'Eve';
121
- * console.log(dianaFriends.length); // 2;
122
- *
123
- * // Verify bidirectional friendship
124
- * const bobFriends = graph.getNeighbors('Bob');
125
- * console.log(bobFriends[0].key); // 'Alice'; // Alice -> Bob -> Alice ✓
126
- * console.log(bobFriends[1].key); // 'Diana';
127
- * @example
128
69
  * // UndirectedGraph for social network connectivity analysis
129
70
  * interface Person {
130
71
  * id: number;
@@ -233,6 +174,21 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
233
174
  * @param v2 - The other vertex or key.
234
175
  * @returns Edge instance or `undefined`.
235
176
  * @remarks Time O(1) avg, Space O(1)
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+ * @example
186
+ * // Get edge between vertices
187
+ * const g = new UndirectedGraph();
188
+ * g.addVertex('A');
189
+ * g.addVertex('B');
190
+ * g.addEdge('A', 'B', 7);
191
+ * console.log(g.getEdge('A', 'B')?.weight); // 7;
236
192
  */
237
193
  getEdge(v1: VO | VertexKey | undefined, v2: VO | VertexKey | undefined): EO | undefined;
238
194
  /**
@@ -249,6 +205,44 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
249
205
  * @param otherSideVertexKey - Required second endpoint when deleting by pair.
250
206
  * @returns Removed edge or `undefined`.
251
207
  * @remarks Time O(1) avg, Space O(1)
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+ * @example
220
+ * // UndirectedGraph deleteEdge and vertex operations
221
+ * const graph = new UndirectedGraph<string>();
222
+ *
223
+ * // Build a simple undirected graph
224
+ * graph.addVertex('X');
225
+ * graph.addVertex('Y');
226
+ * graph.addVertex('Z');
227
+ * graph.addEdge('X', 'Y', 1);
228
+ * graph.addEdge('Y', 'Z', 2);
229
+ * graph.addEdge('X', 'Z', 3);
230
+ *
231
+ * // Delete an edge
232
+ * graph.deleteEdge('X', 'Y');
233
+ * console.log(graph.hasEdge('X', 'Y')); // false;
234
+ *
235
+ * // Bidirectional deletion confirmed
236
+ * console.log(graph.hasEdge('Y', 'X')); // false;
237
+ *
238
+ * // Other edges should remain
239
+ * console.log(graph.hasEdge('Y', 'Z')); // true;
240
+ * console.log(graph.hasEdge('Z', 'Y')); // true;
241
+ *
242
+ * // Delete a vertex
243
+ * graph.deleteVertex('Y');
244
+ * console.log(graph.hasVertex('Y')); // false;
245
+ * console.log(graph.size); // 2;
252
246
  */
253
247
  deleteEdge(edgeOrOneSideVertexKey: EO | VertexKey, otherSideVertexKey?: VertexKey): EO | undefined;
254
248
  /**
@@ -256,6 +250,22 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
256
250
  * @param vertexOrKey - Vertex or key.
257
251
  * @returns `true` if removed; otherwise `false`.
258
252
  * @remarks Time O(deg), Space O(1)
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+ * @example
262
+ * // Remove vertex and edges
263
+ * const g = new UndirectedGraph();
264
+ * g.addVertex('A');
265
+ * g.addVertex('B');
266
+ * g.addEdge('A', 'B');
267
+ * g.deleteVertex('A');
268
+ * console.log(g.hasVertex('A')); // false;
259
269
  */
260
270
  deleteVertex(vertexOrKey: VO | VertexKey): boolean;
261
271
  /**
@@ -276,8 +286,69 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
276
286
  * Unique set of undirected edges across endpoints.
277
287
  * @returns Array of edges.
278
288
  * @remarks Time O(E), Space O(E)
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+ * @example
298
+ * // Get all edges
299
+ * const g = new UndirectedGraph();
300
+ * g.addVertex('A');
301
+ * g.addVertex('B');
302
+ * g.addEdge('A', 'B');
303
+ * console.log(g.edgeSet().length); // 1;
279
304
  */
280
305
  edgeSet(): EO[];
306
+ /**
307
+ * UndirectedGraph connectivity and neighbors
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+ * @example
320
+ * // UndirectedGraph connectivity and neighbors
321
+ * const graph = new UndirectedGraph<string>();
322
+ *
323
+ * // Build a friendship network
324
+ * const people = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'];
325
+ * for (const person of people) {
326
+ * graph.addVertex(person);
327
+ * }
328
+ *
329
+ * // Add friendships (undirected edges)
330
+ * graph.addEdge('Alice', 'Bob', 1);
331
+ * graph.addEdge('Alice', 'Charlie', 1);
332
+ * graph.addEdge('Bob', 'Diana', 1);
333
+ * graph.addEdge('Charlie', 'Eve', 1);
334
+ * graph.addEdge('Diana', 'Eve', 1);
335
+ *
336
+ * // Get friends of each person
337
+ * const aliceFriends = graph.getNeighbors('Alice');
338
+ * console.log(aliceFriends[0].key); // 'Bob';
339
+ * console.log(aliceFriends[1].key); // 'Charlie';
340
+ * console.log(aliceFriends.length); // 2;
341
+ *
342
+ * const dianaFriends = graph.getNeighbors('Diana');
343
+ * console.log(dianaFriends[0].key); // 'Bob';
344
+ * console.log(dianaFriends[1].key); // 'Eve';
345
+ * console.log(dianaFriends.length); // 2;
346
+ *
347
+ * // Verify bidirectional friendship
348
+ * const bobFriends = graph.getNeighbors('Bob');
349
+ * console.log(bobFriends[0].key); // 'Alice'; // Alice -> Bob -> Alice ✓
350
+ * console.log(bobFriends[1].key); // 'Diana';
351
+ */
281
352
  getNeighbors(vertexOrKey: VO | VertexKey): VO[];
282
353
  /**
283
354
  * Resolve an edge's two endpoints to vertex instances.
@@ -306,6 +377,24 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
306
377
  * Tarjan-based bridge and articulation point detection.
307
378
  * @returns `{ dfnMap, lowMap, bridges, cutVertices }`.
308
379
  * @remarks Time O(V + E), Space O(V + E)
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+ * @example
389
+ * // Find articulation points and bridges
390
+ * const g = new UndirectedGraph();
391
+ * g.addVertex('A');
392
+ * g.addVertex('B');
393
+ * g.addVertex('C');
394
+ * g.addEdge('A', 'B');
395
+ * g.addEdge('B', 'C');
396
+ * const result = g.tarjan();
397
+ * console.log(result); // defined;
309
398
  */
310
399
  tarjan(): {
311
400
  dfnMap: Map<VO, number>;
@@ -313,16 +402,86 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
313
402
  bridges: EO[];
314
403
  cutVertices: VO[];
315
404
  };
405
+ /**
406
+ * Find biconnected components using edge-stack Tarjan variant.
407
+ * A biconnected component is a maximal biconnected subgraph.
408
+ * @returns Array of edge arrays, each representing a biconnected component.
409
+ * @remarks Time O(V + E), Space O(V + E)
410
+ */
411
+ getBiconnectedComponents(): EO[][];
412
+ /**
413
+ * Detect whether the graph contains a cycle.
414
+ * Uses DFS with parent tracking.
415
+ * @returns `true` if a cycle exists, `false` otherwise.
416
+ * @remarks Time O(V + E), Space O(V)
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+ * @example
426
+ * // Detect cycle
427
+ * const g = new UndirectedGraph();
428
+ * g.addVertex('A');
429
+ * g.addVertex('B');
430
+ * g.addVertex('C');
431
+ * g.addEdge('A', 'B');
432
+ * g.addEdge('B', 'C');
433
+ * console.log(g.hasCycle()); // false;
434
+ * g.addEdge('C', 'A');
435
+ * console.log(g.hasCycle()); // true;
436
+ */
437
+ hasCycle(): boolean;
316
438
  /**
317
439
  * Get bridges discovered by `tarjan()`.
318
440
  * @returns Array of edges that are bridges.
319
441
  * @remarks Time O(B), Space O(1)
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+ * @example
451
+ * // Find bridge edges
452
+ * const g = new UndirectedGraph();
453
+ * g.addVertex('A');
454
+ * g.addVertex('B');
455
+ * g.addVertex('C');
456
+ * g.addEdge('A', 'B');
457
+ * g.addEdge('B', 'C');
458
+ * const bridges = g.getBridges();
459
+ * console.log(bridges.length); // 2;
320
460
  */
321
461
  getBridges(): EO[];
322
462
  /**
323
463
  * Get articulation points discovered by `tarjan()`.
324
464
  * @returns Array of cut vertices.
325
465
  * @remarks Time O(C), Space O(1)
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+ * @example
475
+ * // Find articulation points
476
+ * const g = new UndirectedGraph();
477
+ * g.addVertex('A');
478
+ * g.addVertex('B');
479
+ * g.addVertex('C');
480
+ * g.addEdge('A', 'B');
481
+ * g.addEdge('B', 'C');
482
+ * const cuts = g.getCutVertices();
483
+ * console.log(cuts.length); // 1;
484
+ * console.log(cuts[0].key); // 'B';
326
485
  */
327
486
  getCutVertices(): VO[];
328
487
  /**