avl-tree-typed 2.0.5 → 2.1.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 (104) hide show
  1. package/dist/common/index.js +1 -1
  2. package/dist/constants/index.js +1 -1
  3. package/dist/data-structures/base/iterable-element-base.d.ts +186 -83
  4. package/dist/data-structures/base/iterable-element-base.js +149 -107
  5. package/dist/data-structures/base/iterable-entry-base.d.ts +95 -119
  6. package/dist/data-structures/base/iterable-entry-base.js +59 -116
  7. package/dist/data-structures/base/linear-base.d.ts +250 -192
  8. package/dist/data-structures/base/linear-base.js +137 -274
  9. package/dist/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
  10. package/dist/data-structures/binary-tree/avl-tree-counter.js +171 -205
  11. package/dist/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
  12. package/dist/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
  13. package/dist/data-structures/binary-tree/avl-tree.d.ts +138 -149
  14. package/dist/data-structures/binary-tree/avl-tree.js +208 -195
  15. package/dist/data-structures/binary-tree/binary-tree.d.ts +476 -632
  16. package/dist/data-structures/binary-tree/binary-tree.js +598 -869
  17. package/dist/data-structures/binary-tree/bst.d.ts +258 -306
  18. package/dist/data-structures/binary-tree/bst.js +505 -481
  19. package/dist/data-structures/binary-tree/red-black-tree.d.ts +107 -179
  20. package/dist/data-structures/binary-tree/red-black-tree.js +114 -209
  21. package/dist/data-structures/binary-tree/tree-counter.d.ts +132 -154
  22. package/dist/data-structures/binary-tree/tree-counter.js +172 -203
  23. package/dist/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
  24. package/dist/data-structures/binary-tree/tree-multi-map.js +105 -85
  25. package/dist/data-structures/graph/abstract-graph.d.ts +238 -233
  26. package/dist/data-structures/graph/abstract-graph.js +267 -237
  27. package/dist/data-structures/graph/directed-graph.d.ts +108 -224
  28. package/dist/data-structures/graph/directed-graph.js +146 -233
  29. package/dist/data-structures/graph/map-graph.d.ts +49 -55
  30. package/dist/data-structures/graph/map-graph.js +56 -59
  31. package/dist/data-structures/graph/undirected-graph.d.ts +103 -146
  32. package/dist/data-structures/graph/undirected-graph.js +129 -149
  33. package/dist/data-structures/hash/hash-map.d.ts +164 -338
  34. package/dist/data-structures/hash/hash-map.js +270 -457
  35. package/dist/data-structures/heap/heap.d.ts +214 -289
  36. package/dist/data-structures/heap/heap.js +340 -349
  37. package/dist/data-structures/heap/max-heap.d.ts +11 -47
  38. package/dist/data-structures/heap/max-heap.js +11 -66
  39. package/dist/data-structures/heap/min-heap.d.ts +12 -47
  40. package/dist/data-structures/heap/min-heap.js +11 -66
  41. package/dist/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
  42. package/dist/data-structures/linked-list/doubly-linked-list.js +368 -494
  43. package/dist/data-structures/linked-list/singly-linked-list.d.ts +261 -310
  44. package/dist/data-structures/linked-list/singly-linked-list.js +447 -466
  45. package/dist/data-structures/linked-list/skip-linked-list.d.ts +0 -107
  46. package/dist/data-structures/linked-list/skip-linked-list.js +0 -100
  47. package/dist/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
  48. package/dist/data-structures/priority-queue/max-priority-queue.js +11 -78
  49. package/dist/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
  50. package/dist/data-structures/priority-queue/min-priority-queue.js +10 -79
  51. package/dist/data-structures/priority-queue/priority-queue.d.ts +2 -61
  52. package/dist/data-structures/priority-queue/priority-queue.js +8 -83
  53. package/dist/data-structures/queue/deque.d.ts +227 -254
  54. package/dist/data-structures/queue/deque.js +309 -348
  55. package/dist/data-structures/queue/queue.d.ts +180 -201
  56. package/dist/data-structures/queue/queue.js +265 -248
  57. package/dist/data-structures/stack/stack.d.ts +124 -102
  58. package/dist/data-structures/stack/stack.js +181 -125
  59. package/dist/data-structures/trie/trie.d.ts +164 -165
  60. package/dist/data-structures/trie/trie.js +189 -172
  61. package/dist/interfaces/binary-tree.d.ts +56 -6
  62. package/dist/interfaces/graph.d.ts +16 -0
  63. package/dist/types/data-structures/base/base.d.ts +1 -1
  64. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -0
  65. package/dist/types/utils/utils.d.ts +1 -0
  66. package/dist/utils/number.js +1 -2
  67. package/dist/utils/utils.d.ts +1 -1
  68. package/dist/utils/utils.js +9 -8
  69. package/package.json +15 -15
  70. package/src/data-structures/base/iterable-element-base.ts +238 -115
  71. package/src/data-structures/base/iterable-entry-base.ts +96 -120
  72. package/src/data-structures/base/linear-base.ts +271 -277
  73. package/src/data-structures/binary-tree/avl-tree-counter.ts +198 -216
  74. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +192 -101
  75. package/src/data-structures/binary-tree/avl-tree.ts +239 -206
  76. package/src/data-structures/binary-tree/binary-tree.ts +664 -893
  77. package/src/data-structures/binary-tree/bst.ts +568 -570
  78. package/src/data-structures/binary-tree/red-black-tree.ts +161 -222
  79. package/src/data-structures/binary-tree/tree-counter.ts +199 -218
  80. package/src/data-structures/binary-tree/tree-multi-map.ts +131 -97
  81. package/src/data-structures/graph/abstract-graph.ts +339 -264
  82. package/src/data-structures/graph/directed-graph.ts +146 -236
  83. package/src/data-structures/graph/map-graph.ts +63 -60
  84. package/src/data-structures/graph/undirected-graph.ts +129 -152
  85. package/src/data-structures/hash/hash-map.ts +274 -496
  86. package/src/data-structures/heap/heap.ts +389 -402
  87. package/src/data-structures/heap/max-heap.ts +12 -76
  88. package/src/data-structures/heap/min-heap.ts +13 -76
  89. package/src/data-structures/linked-list/doubly-linked-list.ts +426 -530
  90. package/src/data-structures/linked-list/singly-linked-list.ts +495 -517
  91. package/src/data-structures/linked-list/skip-linked-list.ts +1 -108
  92. package/src/data-structures/priority-queue/max-priority-queue.ts +12 -87
  93. package/src/data-structures/priority-queue/min-priority-queue.ts +11 -88
  94. package/src/data-structures/priority-queue/priority-queue.ts +3 -92
  95. package/src/data-structures/queue/deque.ts +381 -357
  96. package/src/data-structures/queue/queue.ts +310 -264
  97. package/src/data-structures/stack/stack.ts +217 -131
  98. package/src/data-structures/trie/trie.ts +240 -175
  99. package/src/interfaces/binary-tree.ts +240 -6
  100. package/src/interfaces/graph.ts +37 -0
  101. package/src/types/data-structures/base/base.ts +5 -5
  102. package/src/types/data-structures/graph/abstract-graph.ts +5 -0
  103. package/src/types/utils/utils.ts +2 -0
  104. package/src/utils/utils.ts +9 -14
@@ -1,14 +1,18 @@
1
1
  /**
2
2
  * data-structure-typed
3
- *
4
3
  * @author Kirk Qi
5
4
  * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
6
5
  * @license MIT License
7
6
  */
8
- import type { Comparator, ElementCallback, HeapOptions } from '../../types';
7
+ import type { HeapOptions } from '../../types';
9
8
  import { Heap } from './heap';
10
9
 
11
10
  /**
11
+ * @template E
12
+ * @template R
13
+ * Max-oriented binary heap.
14
+ * Notes and typical use-cases are documented in {@link Heap}.
15
+ *
12
16
  * 1. Complete Binary Tree: Heaps are typically complete binary trees, meaning every level is fully filled except possibly for the last level, which has nodes as far left as possible.
13
17
  * 2. Heap Properties: The value of each parent node is greater than or equal to the value of its children.
14
18
  * 3. Root Node Access: In a heap, the largest element (in a max heap) or the smallest element (in a min heap) is always at the root of the tree.
@@ -17,8 +21,14 @@ import { Heap } from './heap';
17
21
  * 6. Non-linear Search: While a heap allows rapid access to its largest or smallest element, it is less efficient for other operations, such as searching for a specific element, as it is not designed for these tasks.
18
22
  * 7. Efficient Sorting Algorithms: For example, heap sort. Heap sort uses the properties of a heap to sort elements.
19
23
  * 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prim's minimum-spanning tree algorithm, which use heaps to improve performance.
24
+ * @example
20
25
  */
21
26
  export class MaxHeap<E = any, R = any> extends Heap<E, R> {
27
+ /**
28
+ * Create a max-heap. For objects, supply a custom comparator.
29
+ * @param elements Optional initial elements.
30
+ * @param options Optional configuration.
31
+ */
22
32
  constructor(elements: Iterable<E> | Iterable<R> = [], options?: HeapOptions<E, R>) {
23
33
  super(elements, {
24
34
  comparator: (a: E, b: E): number => {
@@ -34,78 +44,4 @@ export class MaxHeap<E = any, R = any> extends Heap<E, R> {
34
44
  ...options
35
45
  });
36
46
  }
37
-
38
- /**
39
- * The `clone` function returns a new instance of the `MaxHeap` class with the same properties as the
40
- * current instance.
41
- * @returns The `clone()` method is returning a new instance of the `MaxHeap` class with the same
42
- * properties as the current instance.
43
- */
44
- override clone(): MaxHeap<E, R> {
45
- return new MaxHeap<E, R>(this, { comparator: this.comparator, toElementFn: this.toElementFn });
46
- }
47
-
48
- /**
49
- * Time Complexity: O(n)
50
- * Space Complexity: O(n)
51
- *
52
- * The `filter` function creates a new MaxHeap object containing elements that pass a given callback
53
- * function.
54
- * @param callback - The `callback` parameter is a function that will be called for each element in
55
- * the heap. It takes three arguments: the current element, the index of the current element, and the
56
- * heap itself. The callback function should return a boolean value indicating whether the current
57
- * element should be included in the filtered list
58
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
59
- * to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
60
- * passed as the `this` value to the `callback` function. If `thisArg` is
61
- * @returns The `filter` method is returning a new `MaxHeap` object that contains the elements that pass
62
- * the filter condition specified by the `callback` function.
63
- */
64
- override filter(callback: ElementCallback<E, R, boolean>, thisArg?: any): MaxHeap<E, R> {
65
- const filteredList = new MaxHeap<E, R>([], { toElementFn: this.toElementFn, comparator: this.comparator });
66
- let index = 0;
67
- for (const current of this) {
68
- if (callback.call(thisArg, current, index, this)) {
69
- filteredList.add(current);
70
- }
71
- index++;
72
- }
73
- return filteredList;
74
- }
75
-
76
- /**
77
- * Time Complexity: O(n log n)
78
- * Space Complexity: O(n)
79
- *
80
- * The `map` function creates a new heap by applying a callback function to each element of the
81
- * original heap.
82
- * @param callback - The `callback` parameter is a function that will be called for each element in
83
- * the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
84
- * element), and `this` (the heap itself). The callback function should return a value of
85
- * @param comparator - The `comparator` parameter is a function that defines the order of the
86
- * elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
87
- * if `a` should be placed before `b`, a positive number if `a` should be placed after
88
- * @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
89
- * element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
90
- * returns a value of type `T`. This function is used to transform the elements of the original
91
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
92
- * specify the value of `this` within the callback function. It is used to set the context or scope
93
- * in which the callback function will be executed. If `thisArg` is provided, it will be used as the
94
- * value of
95
- * @returns a new instance of the `MaxHeap` class with the mapped elements.
96
- */
97
- override map<EM, RM>(
98
- callback: ElementCallback<E, R, EM>,
99
- comparator: Comparator<EM>,
100
- toElementFn?: (rawElement: RM) => EM,
101
- thisArg?: any
102
- ): MaxHeap<EM, RM> {
103
- const mappedHeap: MaxHeap<EM, RM> = new MaxHeap<EM, RM>([], { comparator, toElementFn });
104
- let index = 0;
105
- for (const el of this) {
106
- mappedHeap.add(callback.call(thisArg, el, index, this));
107
- index++;
108
- }
109
- return mappedHeap;
110
- }
111
47
  }
@@ -1,14 +1,19 @@
1
1
  /**
2
+ * @remarks Time O(n log n), Space O(n).
2
3
  * data-structure-typed
3
- *
4
4
  * @author Kirk Qi
5
5
  * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { Comparator, ElementCallback, HeapOptions } from '../../types';
8
+ import type { HeapOptions } from '../../types';
9
9
  import { Heap } from './heap';
10
10
 
11
11
  /**
12
+ * @template E
13
+ * @template R
14
+ * Min-oriented binary heap.
15
+ * Notes and typical use-cases are documented in {@link Heap}.
16
+ *
12
17
  * 1. Complete Binary Tree: Heaps are typically complete binary trees, meaning every level is fully filled except possibly for the last level, which has nodes as far left as possible.
13
18
  * 2. MinHeap Properties: The value of each parent node is less than or equal to the value of its children.
14
19
  * 3. Root Node Access: In a heap, the largest element (in a max heap) or the smallest element (in a min heap) is always at the root of the tree.
@@ -17,83 +22,15 @@ import { Heap } from './heap';
17
22
  * 6. Non-linear Search: While a heap allows rapid access to its largest or smallest element, it is less efficient for other operations, such as searching for a specific element, as it is not designed for these tasks.
18
23
  * 7. Efficient Sorting Algorithms: For example, heap sort. MinHeap sort uses the properties of a heap to sort elements.
19
24
  * 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prim's minimum spanning tree algorithm, which use heaps to improve performance.
25
+ * @example
20
26
  */
21
27
  export class MinHeap<E = any, R = any> extends Heap<E, R> {
22
- constructor(elements: Iterable<E> | Iterable<R> = [], options?: HeapOptions<E, R>) {
23
- super(elements, options);
24
- }
25
-
26
- /**
27
- * The `clone` function returns a new instance of the `MinHeap` class with the same comparator and
28
- * toElementFn as the original instance.
29
- * @returns The `clone()` method is returning a new instance of the `MinHeap` class with the same
30
- * properties as the current instance.
31
- */
32
- override clone(): MinHeap<E, R> {
33
- return new MinHeap<E, R>(this, { comparator: this.comparator, toElementFn: this.toElementFn });
34
- }
35
-
36
- /**
37
- * Time Complexity: O(n)
38
- * Space Complexity: O(n)
39
- *
40
- * The `filter` function creates a new MinHeap object containing elements that pass a given callback
41
- * function.
42
- * @param callback - The `callback` parameter is a function that will be called for each element in
43
- * the heap. It takes three arguments: the current element, the index of the current element, and the
44
- * heap itself. The callback function should return a boolean value indicating whether the current
45
- * element should be included in the filtered list
46
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
47
- * to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
48
- * passed as the `this` value to the `callback` function. If `thisArg` is
49
- * @returns The `filter` method is returning a new `MinHeap` object that contains the elements that pass
50
- * the filter condition specified by the `callback` function.
51
- */
52
- override filter(callback: ElementCallback<E, R, boolean>, thisArg?: any): MinHeap<E, R> {
53
- const filteredList = new MinHeap<E, R>([], { toElementFn: this.toElementFn, comparator: this.comparator });
54
- let index = 0;
55
- for (const current of this) {
56
- if (callback.call(thisArg, current, index, this)) {
57
- filteredList.add(current);
58
- }
59
- index++;
60
- }
61
- return filteredList;
62
- }
63
-
64
28
  /**
65
- * Time Complexity: O(n log n)
66
- * Space Complexity: O(n)
67
- *
68
- * The `map` function creates a new heap by applying a callback function to each element of the
69
- * original heap.
70
- * @param callback - The `callback` parameter is a function that will be called for each element in
71
- * the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
72
- * element), and `this` (the heap itself). The callback function should return a value of
73
- * @param comparator - The `comparator` parameter is a function that defines the order of the
74
- * elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
75
- * if `a` should be placed before `b`, a positive number if `a` should be placed after
76
- * @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
77
- * element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
78
- * returns a value of type `T`. This function is used to transform the elements of the original
79
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
80
- * specify the value of `this` within the callback function. It is used to set the context or scope
81
- * in which the callback function will be executed. If `thisArg` is provided, it will be used as the
82
- * value of
83
- * @returns a new instance of the `MinHeap` class with the mapped elements.
29
+ * Create a min-heap.
30
+ * @param elements Optional initial elements.
31
+ * @param options Optional configuration.
84
32
  */
85
- override map<EM, RM>(
86
- callback: ElementCallback<E, R, EM>,
87
- comparator: Comparator<EM>,
88
- toElementFn?: (rawElement: RM) => EM,
89
- thisArg?: any
90
- ): MinHeap<EM, RM> {
91
- const mappedHeap: MinHeap<EM, RM> = new MinHeap<EM, RM>([], { comparator, toElementFn });
92
- let index = 0;
93
- for (const el of this) {
94
- mappedHeap.add(callback.call(thisArg, el, index, this));
95
- index++;
96
- }
97
- return mappedHeap;
33
+ constructor(elements: Iterable<E> | Iterable<R> = [], options?: HeapOptions<E, R>) {
34
+ super(elements, options);
98
35
  }
99
36
  }