data-structure-typed 1.36.0 → 1.36.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/dist/data-structures/binary-tree/avl-tree.d.ts +3 -3
  3. package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
  4. package/dist/data-structures/binary-tree/binary-tree.d.ts +510 -5
  5. package/dist/data-structures/binary-tree/binary-tree.js +1174 -5
  6. package/dist/data-structures/binary-tree/binary-tree.js.map +1 -1
  7. package/dist/data-structures/binary-tree/bst.d.ts +3 -3
  8. package/dist/data-structures/binary-tree/bst.js.map +1 -1
  9. package/dist/data-structures/binary-tree/index.d.ts +0 -5
  10. package/dist/data-structures/binary-tree/index.js +0 -5
  11. package/dist/data-structures/binary-tree/index.js.map +1 -1
  12. package/dist/data-structures/binary-tree/rb-tree.d.ts +3 -3
  13. package/dist/data-structures/binary-tree/rb-tree.js.map +1 -1
  14. package/dist/data-structures/binary-tree/tree-multiset.d.ts +3 -3
  15. package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -1
  16. package/dist/data-structures/graph/abstract-graph.d.ts +2 -2
  17. package/dist/data-structures/graph/directed-graph.d.ts +2 -2
  18. package/dist/data-structures/graph/map-graph.d.ts +1 -1
  19. package/dist/data-structures/graph/map-graph.js +1 -1
  20. package/dist/data-structures/graph/undirected-graph.d.ts +2 -2
  21. package/dist/data-structures/hash/index.d.ts +0 -1
  22. package/dist/data-structures/hash/index.js +0 -1
  23. package/dist/data-structures/hash/index.js.map +1 -1
  24. package/dist/data-structures/heap/heap.d.ts +23 -24
  25. package/dist/data-structures/heap/heap.js +8 -25
  26. package/dist/data-structures/heap/heap.js.map +1 -1
  27. package/dist/data-structures/heap/max-heap.d.ts +3 -3
  28. package/dist/data-structures/heap/max-heap.js.map +1 -1
  29. package/dist/data-structures/heap/min-heap.d.ts +3 -3
  30. package/dist/data-structures/heap/min-heap.js.map +1 -1
  31. package/dist/data-structures/priority-queue/max-priority-queue.d.ts +3 -3
  32. package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  33. package/dist/data-structures/priority-queue/min-priority-queue.d.ts +3 -3
  34. package/dist/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  35. package/dist/data-structures/priority-queue/priority-queue.d.ts +3 -3
  36. package/dist/data-structures/priority-queue/priority-queue.js.map +1 -1
  37. package/dist/interfaces/binary-tree.d.ts +5 -4
  38. package/dist/interfaces/{abstract-graph.d.ts → graph.d.ts} +1 -1
  39. package/dist/interfaces/{bst.js → graph.js} +1 -1
  40. package/dist/interfaces/graph.js.map +1 -0
  41. package/dist/interfaces/index.d.ts +1 -8
  42. package/dist/interfaces/index.js +1 -8
  43. package/dist/interfaces/index.js.map +1 -1
  44. package/dist/types/data-structures/abstract-graph.d.ts +0 -1
  45. package/dist/types/data-structures/binary-tree.d.ts +32 -2
  46. package/dist/types/data-structures/binary-tree.js +22 -0
  47. package/dist/types/data-structures/binary-tree.js.map +1 -1
  48. package/dist/types/data-structures/bst.d.ts +1 -2
  49. package/dist/types/data-structures/heap.d.ts +2 -1
  50. package/dist/types/data-structures/index.d.ts +0 -2
  51. package/dist/types/data-structures/index.js +0 -2
  52. package/dist/types/data-structures/index.js.map +1 -1
  53. package/lib/data-structures/binary-tree/avl-tree.d.ts +3 -3
  54. package/lib/data-structures/binary-tree/binary-tree.d.ts +510 -5
  55. package/lib/data-structures/binary-tree/binary-tree.js +1174 -5
  56. package/lib/data-structures/binary-tree/bst.d.ts +3 -3
  57. package/lib/data-structures/binary-tree/index.d.ts +0 -5
  58. package/lib/data-structures/binary-tree/index.js +0 -5
  59. package/lib/data-structures/binary-tree/rb-tree.d.ts +3 -3
  60. package/lib/data-structures/binary-tree/tree-multiset.d.ts +3 -3
  61. package/lib/data-structures/graph/abstract-graph.d.ts +2 -2
  62. package/lib/data-structures/graph/directed-graph.d.ts +2 -2
  63. package/lib/data-structures/graph/map-graph.d.ts +1 -1
  64. package/lib/data-structures/graph/map-graph.js +1 -1
  65. package/lib/data-structures/graph/undirected-graph.d.ts +2 -2
  66. package/lib/data-structures/hash/index.d.ts +0 -1
  67. package/lib/data-structures/hash/index.js +0 -1
  68. package/lib/data-structures/heap/heap.d.ts +23 -24
  69. package/lib/data-structures/heap/heap.js +8 -25
  70. package/lib/data-structures/heap/max-heap.d.ts +3 -3
  71. package/lib/data-structures/heap/min-heap.d.ts +3 -3
  72. package/lib/data-structures/priority-queue/max-priority-queue.d.ts +3 -3
  73. package/lib/data-structures/priority-queue/min-priority-queue.d.ts +3 -3
  74. package/lib/data-structures/priority-queue/priority-queue.d.ts +3 -3
  75. package/lib/interfaces/binary-tree.d.ts +5 -4
  76. package/lib/interfaces/{abstract-graph.d.ts → graph.d.ts} +1 -1
  77. package/lib/interfaces/index.d.ts +1 -8
  78. package/lib/interfaces/index.js +1 -8
  79. package/lib/types/data-structures/abstract-graph.d.ts +0 -1
  80. package/lib/types/data-structures/binary-tree.d.ts +32 -2
  81. package/lib/types/data-structures/binary-tree.js +21 -1
  82. package/lib/types/data-structures/bst.d.ts +1 -2
  83. package/lib/types/data-structures/heap.d.ts +2 -1
  84. package/lib/types/data-structures/index.d.ts +0 -2
  85. package/lib/types/data-structures/index.js +0 -2
  86. package/package.json +4 -4
  87. package/src/data-structures/binary-tree/avl-tree.ts +6 -6
  88. package/src/data-structures/binary-tree/binary-tree.ts +1523 -14
  89. package/src/data-structures/binary-tree/bst.ts +3 -6
  90. package/src/data-structures/binary-tree/index.ts +0 -5
  91. package/src/data-structures/binary-tree/rb-tree.ts +6 -6
  92. package/src/data-structures/binary-tree/tree-multiset.ts +6 -6
  93. package/src/data-structures/graph/abstract-graph.ts +2 -2
  94. package/src/data-structures/graph/directed-graph.ts +2 -2
  95. package/src/data-structures/graph/map-graph.ts +1 -1
  96. package/src/data-structures/graph/undirected-graph.ts +2 -2
  97. package/src/data-structures/hash/index.ts +0 -1
  98. package/src/data-structures/heap/heap.ts +30 -48
  99. package/src/data-structures/heap/max-heap.ts +3 -3
  100. package/src/data-structures/heap/min-heap.ts +3 -3
  101. package/src/data-structures/priority-queue/max-priority-queue.ts +3 -3
  102. package/src/data-structures/priority-queue/min-priority-queue.ts +3 -3
  103. package/src/data-structures/priority-queue/priority-queue.ts +3 -3
  104. package/src/interfaces/binary-tree.ts +7 -4
  105. package/src/interfaces/{abstract-graph.ts → graph.ts} +1 -1
  106. package/src/interfaces/index.ts +1 -8
  107. package/src/types/data-structures/abstract-graph.ts +1 -1
  108. package/src/types/data-structures/binary-tree.ts +42 -2
  109. package/src/types/data-structures/bst.ts +2 -2
  110. package/src/types/data-structures/heap.ts +3 -1
  111. package/src/types/data-structures/index.ts +0 -2
  112. package/src/types/data-structures/navigator.ts +1 -0
  113. package/test/unit/data-structures/heap/max-heap.test.ts +2 -2
  114. package/test/unit/data-structures/heap/min-heap.test.ts +2 -2
  115. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +2 -1
  116. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -1
  117. package/umd/bundle.min.js +1 -1
  118. package/umd/bundle.min.js.LICENSE.txt +7 -0
  119. package/umd/bundle.min.js.map +1 -1
  120. package/dist/data-structures/binary-tree/aa-tree.d.ts +0 -2
  121. package/dist/data-structures/binary-tree/aa-tree.js +0 -7
  122. package/dist/data-structures/binary-tree/aa-tree.js.map +0 -1
  123. package/dist/data-structures/binary-tree/abstract-binary-tree.d.ts +0 -527
  124. package/dist/data-structures/binary-tree/abstract-binary-tree.js +0 -1199
  125. package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +0 -1
  126. package/dist/data-structures/binary-tree/b-tree.d.ts +0 -2
  127. package/dist/data-structures/binary-tree/b-tree.js +0 -7
  128. package/dist/data-structures/binary-tree/b-tree.js.map +0 -1
  129. package/dist/data-structures/binary-tree/splay-tree.d.ts +0 -2
  130. package/dist/data-structures/binary-tree/splay-tree.js +0 -7
  131. package/dist/data-structures/binary-tree/splay-tree.js.map +0 -1
  132. package/dist/data-structures/binary-tree/two-three-tree.d.ts +0 -2
  133. package/dist/data-structures/binary-tree/two-three-tree.js +0 -7
  134. package/dist/data-structures/binary-tree/two-three-tree.js.map +0 -1
  135. package/dist/data-structures/hash/pair.d.ts +0 -2
  136. package/dist/data-structures/hash/pair.js +0 -7
  137. package/dist/data-structures/hash/pair.js.map +0 -1
  138. package/dist/interfaces/abstract-binary-tree.d.ts +0 -7
  139. package/dist/interfaces/abstract-binary-tree.js +0 -3
  140. package/dist/interfaces/abstract-binary-tree.js.map +0 -1
  141. package/dist/interfaces/abstract-graph.js +0 -3
  142. package/dist/interfaces/abstract-graph.js.map +0 -1
  143. package/dist/interfaces/avl-tree.d.ts +0 -7
  144. package/dist/interfaces/avl-tree.js +0 -3
  145. package/dist/interfaces/avl-tree.js.map +0 -1
  146. package/dist/interfaces/bst.d.ts +0 -6
  147. package/dist/interfaces/bst.js.map +0 -1
  148. package/dist/interfaces/directed-graph.d.ts +0 -3
  149. package/dist/interfaces/directed-graph.js +0 -3
  150. package/dist/interfaces/directed-graph.js.map +0 -1
  151. package/dist/interfaces/rb-tree.d.ts +0 -6
  152. package/dist/interfaces/rb-tree.js +0 -3
  153. package/dist/interfaces/rb-tree.js.map +0 -1
  154. package/dist/interfaces/tree-multiset.d.ts +0 -6
  155. package/dist/interfaces/tree-multiset.js +0 -3
  156. package/dist/interfaces/tree-multiset.js.map +0 -1
  157. package/dist/interfaces/undirected-graph.d.ts +0 -3
  158. package/dist/interfaces/undirected-graph.js +0 -3
  159. package/dist/interfaces/undirected-graph.js.map +0 -1
  160. package/dist/types/data-structures/abstract-binary-tree.d.ts +0 -34
  161. package/dist/types/data-structures/abstract-binary-tree.js +0 -25
  162. package/dist/types/data-structures/abstract-binary-tree.js.map +0 -1
  163. package/dist/types/data-structures/priority-queue.d.ts +0 -7
  164. package/dist/types/data-structures/priority-queue.js +0 -3
  165. package/dist/types/data-structures/priority-queue.js.map +0 -1
  166. package/lib/data-structures/binary-tree/aa-tree.d.ts +0 -2
  167. package/lib/data-structures/binary-tree/aa-tree.js +0 -2
  168. package/lib/data-structures/binary-tree/abstract-binary-tree.d.ts +0 -527
  169. package/lib/data-structures/binary-tree/abstract-binary-tree.js +0 -1193
  170. package/lib/data-structures/binary-tree/b-tree.d.ts +0 -2
  171. package/lib/data-structures/binary-tree/b-tree.js +0 -2
  172. package/lib/data-structures/binary-tree/splay-tree.d.ts +0 -2
  173. package/lib/data-structures/binary-tree/splay-tree.js +0 -2
  174. package/lib/data-structures/binary-tree/two-three-tree.d.ts +0 -2
  175. package/lib/data-structures/binary-tree/two-three-tree.js +0 -2
  176. package/lib/data-structures/hash/pair.d.ts +0 -2
  177. package/lib/data-structures/hash/pair.js +0 -2
  178. package/lib/interfaces/abstract-binary-tree.d.ts +0 -7
  179. package/lib/interfaces/abstract-graph.js +0 -1
  180. package/lib/interfaces/avl-tree.d.ts +0 -7
  181. package/lib/interfaces/avl-tree.js +0 -1
  182. package/lib/interfaces/bst.d.ts +0 -6
  183. package/lib/interfaces/bst.js +0 -1
  184. package/lib/interfaces/directed-graph.d.ts +0 -3
  185. package/lib/interfaces/directed-graph.js +0 -1
  186. package/lib/interfaces/rb-tree.d.ts +0 -6
  187. package/lib/interfaces/rb-tree.js +0 -1
  188. package/lib/interfaces/tree-multiset.d.ts +0 -6
  189. package/lib/interfaces/tree-multiset.js +0 -1
  190. package/lib/interfaces/undirected-graph.d.ts +0 -3
  191. package/lib/interfaces/undirected-graph.js +0 -1
  192. package/lib/types/data-structures/abstract-binary-tree.d.ts +0 -34
  193. package/lib/types/data-structures/abstract-binary-tree.js +0 -21
  194. package/lib/types/data-structures/priority-queue.d.ts +0 -7
  195. package/lib/types/data-structures/priority-queue.js +0 -1
  196. package/src/data-structures/binary-tree/aa-tree.ts +0 -1
  197. package/src/data-structures/binary-tree/abstract-binary-tree.ts +0 -1556
  198. package/src/data-structures/binary-tree/b-tree.ts +0 -1
  199. package/src/data-structures/binary-tree/splay-tree.ts +0 -1
  200. package/src/data-structures/binary-tree/two-three-tree.ts +0 -1
  201. package/src/data-structures/hash/pair.ts +0 -1
  202. package/src/interfaces/abstract-binary-tree.ts +0 -8
  203. package/src/interfaces/avl-tree.ts +0 -8
  204. package/src/interfaces/bst.ts +0 -6
  205. package/src/interfaces/directed-graph.ts +0 -3
  206. package/src/interfaces/rb-tree.ts +0 -6
  207. package/src/interfaces/tree-multiset.ts +0 -7
  208. package/src/interfaces/undirected-graph.ts +0 -3
  209. package/src/types/data-structures/abstract-binary-tree.ts +0 -49
  210. package/src/types/data-structures/priority-queue.ts +0 -9
  211. /package/lib/interfaces/{abstract-binary-tree.js → graph.js} +0 -0
@@ -14,18 +14,15 @@ import type {
14
14
  } from '../../types';
15
15
  import {CP, LoopType} from '../../types';
16
16
  import {BinaryTree, BinaryTreeNode} from './binary-tree';
17
- import {IBST, IBSTNode} from '../../interfaces';
17
+ import {IBinaryTree} from '../../interfaces';
18
18
 
19
- export class BSTNode<V = any, NEIGHBOR extends BSTNode<V, NEIGHBOR> = BSTNodeNested<V>>
20
- extends BinaryTreeNode<V, NEIGHBOR>
21
- implements IBSTNode<V, NEIGHBOR>
22
- {
19
+ export class BSTNode<V = any, FAMILY extends BSTNode<V, FAMILY> = BSTNodeNested<V>> extends BinaryTreeNode<V, FAMILY> {
23
20
  constructor(key: BinaryTreeNodeKey, val?: V) {
24
21
  super(key, val);
25
22
  }
26
23
  }
27
24
 
28
- export class BST<N extends BSTNode<N['val'], N> = BSTNode> extends BinaryTree<N> implements IBST<N> {
25
+ export class BST<N extends BSTNode<N['val'], N> = BSTNode> extends BinaryTree<N> implements IBinaryTree<N> {
29
26
  /**
30
27
  * The constructor function initializes a binary search tree object with an optional comparator function.
31
28
  * @param {BSTOptions} [options] - An optional object that contains configuration options for the binary search tree.
@@ -1,12 +1,7 @@
1
- export * from './abstract-binary-tree';
2
1
  export * from './binary-tree';
3
2
  export * from './bst';
4
3
  export * from './binary-indexed-tree';
5
4
  export * from './segment-tree';
6
5
  export * from './avl-tree';
7
- export * from './b-tree';
8
6
  export * from './rb-tree';
9
- export * from './splay-tree';
10
- export * from './aa-tree';
11
7
  export * from './tree-multiset';
12
- export * from './two-three-tree';
@@ -1,11 +1,11 @@
1
1
  import {BinaryTreeNodeKey, RBColor, RBTreeNodeNested, RBTreeOptions} from '../../types';
2
- import {IRBTree, IRBTreeNode} from '../../interfaces';
2
+ import {IBinaryTree} from '../../interfaces';
3
3
  import {BST, BSTNode} from './bst';
4
4
 
5
- export class RBTreeNode<V = any, NEIGHBOR extends RBTreeNode<V, NEIGHBOR> = RBTreeNodeNested<V>>
6
- extends BSTNode<V, NEIGHBOR>
7
- implements IRBTreeNode<V, NEIGHBOR>
8
- {
5
+ export class RBTreeNode<V = any, FAMILY extends RBTreeNode<V, FAMILY> = RBTreeNodeNested<V>> extends BSTNode<
6
+ V,
7
+ FAMILY
8
+ > {
9
9
  private _color: RBColor;
10
10
 
11
11
  constructor(key: BinaryTreeNodeKey, val?: V) {
@@ -22,7 +22,7 @@ export class RBTreeNode<V = any, NEIGHBOR extends RBTreeNode<V, NEIGHBOR> = RBTr
22
22
  }
23
23
  }
24
24
 
25
- export class RBTree<N extends RBTreeNode<N['val'], N> = RBTreeNode> extends BST<N> implements IRBTree<N> {
25
+ export class RBTree<N extends RBTreeNode<N['val'], N> = RBTreeNode> extends BST<N> implements IBinaryTree<N> {
26
26
  constructor(options?: RBTreeOptions) {
27
27
  super(options);
28
28
  }
@@ -7,13 +7,13 @@
7
7
  */
8
8
  import type {BinaryTreeNodeKey, TreeMultisetNodeNested, TreeMultisetOptions} from '../../types';
9
9
  import {BinaryTreeDeletedResult, CP, DFSOrderPattern, FamilyPosition, LoopType} from '../../types';
10
- import {ITreeMultiset, ITreeMultisetNode} from '../../interfaces';
10
+ import {IBinaryTree} from '../../interfaces';
11
11
  import {AVLTree, AVLTreeNode} from './avl-tree';
12
12
 
13
- export class TreeMultisetNode<V = any, NEIGHBOR extends TreeMultisetNode<V, NEIGHBOR> = TreeMultisetNodeNested<V>>
14
- extends AVLTreeNode<V, NEIGHBOR>
15
- implements ITreeMultisetNode<V, NEIGHBOR>
16
- {
13
+ export class TreeMultisetNode<
14
+ V = any,
15
+ FAMILY extends TreeMultisetNode<V, FAMILY> = TreeMultisetNodeNested<V>
16
+ > extends AVLTreeNode<V, FAMILY> {
17
17
  /**
18
18
  * The constructor function initializes a BinaryTreeNode object with a key, value, and count.
19
19
  * @param {BinaryTreeNodeKey} key - The `key` parameter is of type `BinaryTreeNodeKey` and represents the unique identifier
@@ -37,7 +37,7 @@ export class TreeMultisetNode<V = any, NEIGHBOR extends TreeMultisetNode<V, NEIG
37
37
  */
38
38
  export class TreeMultiset<N extends TreeMultisetNode<N['val'], N> = TreeMultisetNode>
39
39
  extends AVLTree<N>
40
- implements ITreeMultiset<N>
40
+ implements IBinaryTree<N>
41
41
  {
42
42
  /**
43
43
  * The constructor function for a TreeMultiset class in TypeScript, which extends another class and sets an option to
@@ -8,7 +8,7 @@
8
8
  import {arrayRemove, uuidV4} from '../../utils';
9
9
  import {PriorityQueue} from '../priority-queue';
10
10
  import type {DijkstraResult, VertexKey} from '../../types';
11
- import {IAbstractGraph} from '../../interfaces';
11
+ import {IGraph} from '../../interfaces';
12
12
 
13
13
  export abstract class AbstractVertex<V = any> {
14
14
  /**
@@ -104,7 +104,7 @@ export abstract class AbstractEdge<V = any> {
104
104
  export abstract class AbstractGraph<
105
105
  V extends AbstractVertex<any> = AbstractVertex<any>,
106
106
  E extends AbstractEdge<any> = AbstractEdge<any>
107
- > implements IAbstractGraph<V, E>
107
+ > implements IGraph<V, E>
108
108
  {
109
109
  private _vertices: Map<VertexKey, V> = new Map<VertexKey, V>();
110
110
 
@@ -8,7 +8,7 @@
8
8
  import {arrayRemove} from '../../utils';
9
9
  import {AbstractEdge, AbstractGraph, AbstractVertex} from './abstract-graph';
10
10
  import type {TopologicalStatus, VertexKey} from '../../types';
11
- import {IDirectedGraph} from '../../interfaces';
11
+ import {IGraph} from '../../interfaces';
12
12
 
13
13
  export class DirectedVertex<V = any> extends AbstractVertex<V> {
14
14
  /**
@@ -64,7 +64,7 @@ export class DirectedEdge<V = any> extends AbstractEdge<V> {
64
64
 
65
65
  export class DirectedGraph<V extends DirectedVertex<any> = DirectedVertex, E extends DirectedEdge<any> = DirectedEdge>
66
66
  extends AbstractGraph<V, E>
67
- implements IDirectedGraph<V, E>
67
+ implements IGraph<V, E>
68
68
  {
69
69
  /**
70
70
  * The constructor function initializes an instance of a class.
@@ -126,7 +126,7 @@ export class MapGraph<V extends MapVertex<V['val']> = MapVertex, E extends MapEd
126
126
  * If the weight is not provided, it can be set to a default value or left undefined.
127
127
  * @param [val] - The `val` parameter is an optional value that can be assigned to the edge. It can be of any type,
128
128
  * depending on the specific implementation of the `MapEdge` class.
129
- * @returns a new instance of the `MapEdge` class, casted as type `E`.
129
+ * @returns a new instance of the `MapEdge` class, cast as type `E`.
130
130
  */
131
131
  override createEdge(src: VertexKey, dest: VertexKey, weight?: number, val?: E['val']): E {
132
132
  return new MapEdge(src, dest, weight, val) as E;
@@ -8,7 +8,7 @@
8
8
  import {arrayRemove} from '../../utils';
9
9
  import {AbstractEdge, AbstractGraph, AbstractVertex} from './abstract-graph';
10
10
  import type {VertexKey} from '../../types';
11
- import {IUNDirectedGraph} from '../../interfaces';
11
+ import {IGraph} from '../../interfaces';
12
12
 
13
13
  export class UndirectedVertex<V = any> extends AbstractVertex<V> {
14
14
  /**
@@ -55,7 +55,7 @@ export class UndirectedGraph<
55
55
  E extends UndirectedEdge<any> = UndirectedEdge
56
56
  >
57
57
  extends AbstractGraph<V, E>
58
- implements IUNDirectedGraph<V, E>
58
+ implements IGraph<V, E>
59
59
  {
60
60
  /**
61
61
  * The constructor initializes a new Map object to store edges.
@@ -1,7 +1,6 @@
1
1
  export * from './hash-table';
2
2
  export * from './coordinate-map';
3
3
  export * from './coordinate-set';
4
- export * from './pair';
5
4
  export * from './tree-map';
6
5
  export * from './tree-set';
7
6
  export * from './hash-map';
@@ -1,18 +1,17 @@
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
7
 
9
- import type {CompareFunction} from '../../types';
8
+ import type {HeapComparator, HeapDFSOrderPattern} from '../../types';
10
9
 
11
- export class Heap<T> {
12
- private nodes: T[] = [];
13
- private readonly comparator: CompareFunction<T>;
10
+ export class Heap<E> {
11
+ protected nodes: E[] = [];
12
+ private readonly comparator: HeapComparator<E>;
14
13
 
15
- constructor(comparator: CompareFunction<T>) {
14
+ constructor(comparator: HeapComparator<E>) {
16
15
  this.comparator = comparator;
17
16
  }
18
17
 
@@ -20,7 +19,7 @@ export class Heap<T> {
20
19
  * Insert an element into the heap and maintain the heap properties.
21
20
  * @param value - The element to be inserted.
22
21
  */
23
- add(value: T): Heap<T> {
22
+ add(value: E): Heap<E> {
24
23
  this.nodes.push(value);
25
24
  this.bubbleUp(this.nodes.length - 1);
26
25
  return this;
@@ -30,16 +29,16 @@ export class Heap<T> {
30
29
  * Remove and return the top element (smallest or largest element) from the heap.
31
30
  * @returns The top element or null if the heap is empty.
32
31
  */
33
- poll(): T | null {
32
+ poll(): E | null {
34
33
  if (this.nodes.length === 0) {
35
34
  return null;
36
35
  }
37
36
  if (this.nodes.length === 1) {
38
- return this.nodes.pop() as T;
37
+ return this.nodes.pop() as E;
39
38
  }
40
39
 
41
40
  const topValue = this.nodes[0];
42
- this.nodes[0] = this.nodes.pop() as T;
41
+ this.nodes[0] = this.nodes.pop() as E;
43
42
  this.sinkDown(0);
44
43
  return topValue;
45
44
  }
@@ -99,7 +98,7 @@ export class Heap<T> {
99
98
  * Peek at the top element of the heap without removing it.
100
99
  * @returns The top element or null if the heap is empty.
101
100
  */
102
- peek(): T | null {
101
+ peek(): E | null {
103
102
  if (this.nodes.length === 0) {
104
103
  return null;
105
104
  }
@@ -117,7 +116,7 @@ export class Heap<T> {
117
116
  * Get the last element in the heap, which is not necessarily a leaf node.
118
117
  * @returns The last element or null if the heap is empty.
119
118
  */
120
- leaf(): T | null {
119
+ get leaf(): E | null {
121
120
  return this.nodes[this.size - 1] ?? null;
122
121
  }
123
122
 
@@ -129,11 +128,18 @@ export class Heap<T> {
129
128
  return this.size === 0;
130
129
  }
131
130
 
131
+ /**
132
+ * Reset the nodes of the heap. Make the nodes empty.
133
+ */
132
134
  clear() {
133
135
  this.nodes = [];
134
136
  }
135
137
 
136
- refill(nodes: T[]) {
138
+ /**
139
+ * Clear and add nodes of the heap
140
+ * @param nodes
141
+ */
142
+ refill(nodes: E[]) {
137
143
  this.nodes = nodes;
138
144
  this.fix();
139
145
  }
@@ -143,41 +149,17 @@ export class Heap<T> {
143
149
  * @param value - the element to check.
144
150
  * @returns Returns true if the specified element is contained; otherwise, returns false.
145
151
  */
146
- has(value: T): boolean {
152
+ has(value: E): boolean {
147
153
  return this.nodes.includes(value);
148
154
  }
149
155
 
150
- /**
151
- * Use a comparison function to find the index of an element in the heap.
152
- * @param value - the element to find.
153
- * @param index - the index currently being searched.
154
- * @returns The index of the element, or -1 if not found.
155
- */
156
- private findIndex(value: T, index: number): number {
157
- if (index >= this.size) {
158
- return -1;
159
- }
160
-
161
- const compareResult = this.comparator(value, this.nodes[index]);
162
-
163
- if (compareResult === 0) {
164
- return index; // Element found
165
- } else if (compareResult < 0) {
166
- // The element should be in the left subtree
167
- return this.findIndex(value, 2 * index + 1);
168
- } else {
169
- // The element should be in the right subtree
170
- return this.findIndex(value, 2 * index + 2);
171
- }
172
- }
173
-
174
156
  /**
175
157
  * Depth-first search (DFS) method, different traversal orders can be selected。
176
158
  * @param order - Traversal order parameter: 'in' (in-order), 'pre' (pre-order) or 'post' (post-order).
177
159
  * @returns An array containing elements traversed in the specified order.
178
160
  */
179
- dfs(order: 'in' | 'pre' | 'post'): T[] {
180
- const result: T[] = [];
161
+ dfs(order: HeapDFSOrderPattern): E[] {
162
+ const result: E[] = [];
181
163
 
182
164
  // Auxiliary recursive function, traverses the binary heap according to the traversal order
183
165
  const dfsHelper = (index: number) => {
@@ -207,11 +189,11 @@ export class Heap<T> {
207
189
  * Convert the heap to an array.
208
190
  * @returns An array containing the elements of the heap.
209
191
  */
210
- toArray(): T[] {
192
+ toArray(): E[] {
211
193
  return [...this.nodes];
212
194
  }
213
195
 
214
- getNodes(): T[] {
196
+ getNodes(): E[] {
215
197
  return this.nodes;
216
198
  }
217
199
 
@@ -219,8 +201,8 @@ export class Heap<T> {
219
201
  * Clone the heap, creating a new heap with the same elements.
220
202
  * @returns A new Heap instance containing the same elements.
221
203
  */
222
- clone(): Heap<T> {
223
- const clonedHeap = new Heap<T>(this.comparator);
204
+ clone(): Heap<E> {
205
+ const clonedHeap = new Heap<E>(this.comparator);
224
206
  clonedHeap.nodes = [...this.nodes];
225
207
  return clonedHeap;
226
208
  }
@@ -229,8 +211,8 @@ export class Heap<T> {
229
211
  * Sort the elements in the heap and return them as an array.
230
212
  * @returns An array containing the elements sorted in ascending order.
231
213
  */
232
- sort(): T[] {
233
- const visitedNode: T[] = [];
214
+ sort(): E[] {
215
+ const visitedNode: E[] = [];
234
216
  const cloned = this.clone();
235
217
  while (cloned.size !== 0) {
236
218
  const top = cloned.poll();
@@ -245,8 +227,8 @@ export class Heap<T> {
245
227
  * @param comparator - Comparison function.
246
228
  * @returns A new Heap instance.
247
229
  */
248
- static heapify<T>(nodes: T[], comparator: CompareFunction<T>): Heap<T> {
249
- const binaryHeap = new Heap<T>(comparator);
230
+ static heapify<E>(nodes: E[], comparator: HeapComparator<E>): Heap<E> {
231
+ const binaryHeap = new Heap<E>(comparator);
250
232
  binaryHeap.nodes = [...nodes];
251
233
  binaryHeap.fix(); // Fix heap properties
252
234
  return binaryHeap;
@@ -7,11 +7,11 @@
7
7
  */
8
8
 
9
9
  import {Heap} from './heap';
10
- import type {CompareFunction} from '../../types';
10
+ import type {HeapComparator} from '../../types';
11
11
 
12
- export class MaxHeap<T = any> extends Heap<T> {
12
+ export class MaxHeap<E = any> extends Heap<E> {
13
13
  constructor(
14
- comparator: CompareFunction<T> = (a: T, b: T) => {
14
+ comparator: HeapComparator<E> = (a: E, b: E) => {
15
15
  if (!(typeof a === 'number' && typeof b === 'number')) {
16
16
  throw new Error('The a, b params of compare function must be number');
17
17
  } else {
@@ -7,11 +7,11 @@
7
7
  */
8
8
 
9
9
  import {Heap} from './heap';
10
- import type {CompareFunction} from '../../types';
10
+ import type {HeapComparator} from '../../types';
11
11
 
12
- export class MinHeap<T = any> extends Heap<T> {
12
+ export class MinHeap<E = any> extends Heap<E> {
13
13
  constructor(
14
- comparator: CompareFunction<T> = (a: T, b: T) => {
14
+ comparator: HeapComparator<E> = (a: E, b: E) => {
15
15
  if (!(typeof a === 'number' && typeof b === 'number')) {
16
16
  throw new Error('The a, b params of compare function must be number');
17
17
  } else {
@@ -6,11 +6,11 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import {PriorityQueue} from './priority-queue';
9
- import type {CompareFunction} from '../../types';
9
+ import type {HeapComparator} from '../../types';
10
10
 
11
- export class MaxPriorityQueue<T = any> extends PriorityQueue<T> {
11
+ export class MaxPriorityQueue<E = any> extends PriorityQueue<E> {
12
12
  constructor(
13
- compare: CompareFunction<T> = (a: T, b: T) => {
13
+ compare: HeapComparator<E> = (a: E, b: E) => {
14
14
  if (!(typeof a === 'number' && typeof b === 'number')) {
15
15
  throw new Error('The a, b params of compare function must be number');
16
16
  } else {
@@ -6,11 +6,11 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import {PriorityQueue} from './priority-queue';
9
- import type {CompareFunction} from '../../types';
9
+ import type {HeapComparator} from '../../types';
10
10
 
11
- export class MinPriorityQueue<T = any> extends PriorityQueue<T> {
11
+ export class MinPriorityQueue<E = any> extends PriorityQueue<E> {
12
12
  constructor(
13
- compare: CompareFunction<T> = (a: T, b: T) => {
13
+ compare: HeapComparator<E> = (a: E, b: E) => {
14
14
  if (!(typeof a === 'number' && typeof b === 'number')) {
15
15
  throw new Error('The a, b params of compare function must be number');
16
16
  } else {
@@ -7,10 +7,10 @@
7
7
  */
8
8
 
9
9
  import {Heap} from '../heap';
10
- import {CompareFunction} from '../../types';
10
+ import {HeapComparator} from '../../types';
11
11
 
12
- export class PriorityQueue<T> extends Heap<T> {
13
- constructor(comparator: CompareFunction<T>) {
12
+ export class PriorityQueue<E> extends Heap<E> {
13
+ constructor(comparator: HeapComparator<E>) {
14
14
  super(comparator);
15
15
  }
16
16
  }
@@ -1,7 +1,10 @@
1
1
  import {BinaryTreeNode} from '../data-structures';
2
- import {IAbstractBinaryTree, IAbstractBinaryTreeNode} from './abstract-binary-tree';
2
+ import {BinaryTreeDeletedResult, BinaryTreeNodeKey} from '../types';
3
3
 
4
- export interface IBinaryTreeNode<T, NEIGHBOR extends IBinaryTreeNode<T, NEIGHBOR>>
5
- extends IAbstractBinaryTreeNode<T, NEIGHBOR> {}
4
+ export interface IBinaryTree<N extends BinaryTreeNode<N['val'], N>> {
5
+ createNode(key: BinaryTreeNodeKey, val?: N['val']): N;
6
6
 
7
- export interface IBinaryTree<N extends BinaryTreeNode<N['val'], N>> extends IAbstractBinaryTree<N> {}
7
+ add(keyOrNode: BinaryTreeNodeKey | N | null, val?: N['val']): N | null | undefined;
8
+
9
+ remove(nodeOrKey: N | BinaryTreeNodeKey): BinaryTreeDeletedResult<N>[];
10
+ }
@@ -1,6 +1,6 @@
1
1
  import {VertexKey} from '../types';
2
2
 
3
- export interface IAbstractGraph<V, E> {
3
+ export interface IGraph<V, E> {
4
4
  createVertex(key: VertexKey, val?: V): V;
5
5
 
6
6
  createEdge(srcOrV1: VertexKey | string, destOrV2: VertexKey | string, weight?: number, val?: E): E;
@@ -1,15 +1,8 @@
1
- export * from './abstract-binary-tree';
2
- export * from './abstract-graph';
3
- export * from './avl-tree';
1
+ export * from './graph';
4
2
  export * from './binary-tree';
5
- export * from './bst';
6
- export * from './directed-graph';
7
3
  export * from './doubly-linked-list';
8
4
  export * from './heap';
9
5
  export * from './navigator';
10
6
  export * from './priority-queue';
11
- export * from './rb-tree';
12
7
  export * from './segment-tree';
13
8
  export * from './singly-linked-list';
14
- export * from './tree-multiset';
15
- export * from './undirected-graph';
@@ -1,5 +1,5 @@
1
1
  export type VertexKey = string | number;
2
- export type EdgeKey = string;
2
+
3
3
  export type DijkstraResult<V> = {
4
4
  distMap: Map<V, number>;
5
5
  distPaths?: Map<V, V[]>;
@@ -1,5 +1,45 @@
1
1
  import {BinaryTreeNode} from '../../data-structures/binary-tree';
2
- import {AbstractBinaryTreeOptions} from './abstract-binary-tree';
2
+
3
+ /**
4
+ * Enum representing different loop types.
5
+ *
6
+ * - `iterative`: Indicates the iterative loop type (with loops that use iterations).
7
+ * - `recursive`: Indicates the recursive loop type (with loops that call themselves).
8
+ */
9
+
10
+ export enum LoopType {
11
+ ITERATIVE = 'ITERATIVE',
12
+ RECURSIVE = 'RECURSIVE'
13
+ }
14
+
15
+ export enum FamilyPosition {
16
+ ROOT = 'ROOT',
17
+ LEFT = 'LEFT',
18
+ RIGHT = 'RIGHT',
19
+ ROOT_LEFT = 'ROOT_LEFT',
20
+ ROOT_RIGHT = 'ROOT_RIGHT',
21
+ ISOLATED = 'ISOLATED',
22
+ MAL_NODE = 'MAL_NODE'
23
+ }
24
+
25
+ export type BinaryTreeNodePropertyName = 'key' | 'val';
26
+
27
+ export type NodeOrPropertyName = 'node' | BinaryTreeNodePropertyName;
28
+
29
+ export type DFSOrderPattern = 'in' | 'pre' | 'post';
30
+
31
+ export type BinaryTreeNodeKey = number;
32
+
33
+ export type BinaryTreeNodeProperty<N extends BinaryTreeNode<N['val'], N>> =
34
+ | N['val']
35
+ | N
36
+ | number
37
+ | BinaryTreeNodeKey;
38
+ export type BinaryTreeDeletedResult<N> = { deleted: N | null | undefined; needBalanced: N | null };
39
+
40
+ export type BinaryTreeNodeProperties<N extends BinaryTreeNode<N['val'], N>> =
41
+ BinaryTreeNodeProperty<N>[];
3
42
 
4
43
  export type BinaryTreeNodeNested<T> = BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
- export type BinaryTreeOptions = AbstractBinaryTreeOptions & {}
44
+
45
+ export type BinaryTreeOptions = { loopType?: LoopType }
@@ -1,11 +1,11 @@
1
1
  import {BSTNode} from '../../data-structures/binary-tree';
2
- import type {BinaryTreeOptions} from './binary-tree';
3
- import {BinaryTreeNodeKey} from './abstract-binary-tree';
2
+ import type {BinaryTreeNodeKey, BinaryTreeOptions} from './binary-tree';
4
3
 
5
4
  export type BSTComparator = (a: BinaryTreeNodeKey, b: BinaryTreeNodeKey) => number;
6
5
 
7
6
  // prettier-ignore
8
7
  export type BSTNodeNested<T> = BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
+
9
9
  export type BSTOptions = BinaryTreeOptions & {
10
10
  comparator?: BSTComparator,
11
11
  }
@@ -1 +1,3 @@
1
- export type CompareFunction<T> = (a: T, b: T) => number;
1
+ export type HeapComparator<T> = (a: T, b: T) => number;
2
+
3
+ export type HeapDFSOrderPattern = 'pre' | 'in' | 'post';
@@ -5,10 +5,8 @@ export * from './segment-tree';
5
5
  export * from './tree-multiset';
6
6
  export * from './abstract-graph';
7
7
  export * from './map-graph';
8
- export * from './abstract-binary-tree';
9
8
  export * from './rb-tree';
10
9
  export * from './directed-graph';
11
- export * from './priority-queue';
12
10
  export * from './heap';
13
11
  export * from './singly-linked-list';
14
12
  export * from './doubly-linked-list';
@@ -1,4 +1,5 @@
1
1
  export type Direction = 'up' | 'right' | 'down' | 'left';
2
+
2
3
  export type Turning = {[key in Direction]: Direction};
3
4
 
4
5
  export type NavigatorParams<T = any> = {
@@ -1,7 +1,7 @@
1
- import {CompareFunction, MaxHeap} from '../../../../src';
1
+ import {HeapComparator, MaxHeap} from '../../../../src';
2
2
 
3
3
  describe('MaxHeap', () => {
4
- const numberComparator: CompareFunction<number> = (a, b) => b - a;
4
+ const numberComparator: HeapComparator<number> = (a, b) => b - a;
5
5
  let maxHeap: MaxHeap<number>;
6
6
 
7
7
  beforeEach(() => {
@@ -1,7 +1,7 @@
1
- import {CompareFunction, MinHeap} from '../../../../src';
1
+ import {HeapComparator, MinHeap} from '../../../../src';
2
2
 
3
3
  describe('MinHeap', () => {
4
- const numberComparator: CompareFunction<number> = (a, b) => a - b;
4
+ const numberComparator: HeapComparator<number> = (a, b) => a - b;
5
5
  let minHeap: MinHeap<number>;
6
6
 
7
7
  beforeEach(() => {
@@ -89,7 +89,8 @@ describe('MaxPriorityQueue Performance Test', () => {
89
89
  prev = polled;
90
90
  }
91
91
  }
92
- expect(performance.now() - startTime).toBeLessThan(bigO.LINEAR * 50);
92
+ const cost = performance.now() - startTime;
93
+ expect(cost).toBeLessThan(bigO.LINEAR * 20);
93
94
  expect(prev).toBeGreaterThan(0);
94
95
  });
95
96
 
@@ -25,7 +25,7 @@ describe('MinPriorityQueue Operation Test', () => {
25
25
  priorityQueue.add(3);
26
26
  priorityQueue.add(7);
27
27
 
28
- expect(priorityQueue.leaf()).toBe(7);
28
+ expect(priorityQueue.leaf).toBe(7);
29
29
  });
30
30
 
31
31
  it('should check if the queue is empty', () => {