data-structure-typed 1.18.0 → 1.18.5

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 (268) hide show
  1. package/README.md +193 -66
  2. package/backup/recursive-type/src/assets/complexities-diff.jpg +0 -0
  3. package/backup/recursive-type/src/assets/data-structure-complexities.jpg +0 -0
  4. package/backup/recursive-type/src/assets/logo.png +0 -0
  5. package/backup/recursive-type/src/assets/overview-diagram-of-data-structures.png +0 -0
  6. package/backup/recursive-type/src/data-structures/binary-tree/aa-tree.ts +3 -0
  7. package/backup/recursive-type/src/data-structures/binary-tree/avl-tree.ts +288 -0
  8. package/backup/recursive-type/src/data-structures/binary-tree/b-tree.ts +3 -0
  9. package/backup/recursive-type/src/data-structures/binary-tree/binary-indexed-tree.ts +78 -0
  10. package/backup/recursive-type/src/data-structures/binary-tree/binary-tree.ts +1502 -0
  11. package/backup/recursive-type/src/data-structures/binary-tree/bst.ts +503 -0
  12. package/backup/recursive-type/src/data-structures/binary-tree/diagrams/avl-tree-inserting.gif +0 -0
  13. package/backup/recursive-type/src/data-structures/binary-tree/diagrams/bst-rotation.gif +0 -0
  14. package/backup/recursive-type/src/data-structures/binary-tree/diagrams/segment-tree.png +0 -0
  15. package/backup/recursive-type/src/data-structures/binary-tree/index.ts +11 -0
  16. package/backup/recursive-type/src/data-structures/binary-tree/rb-tree.ts +110 -0
  17. package/backup/recursive-type/src/data-structures/binary-tree/segment-tree.ts +243 -0
  18. package/backup/recursive-type/src/data-structures/binary-tree/splay-tree.ts +3 -0
  19. package/backup/recursive-type/src/data-structures/binary-tree/tree-multiset.ts +55 -0
  20. package/backup/recursive-type/src/data-structures/binary-tree/two-three-tree.ts +3 -0
  21. package/backup/recursive-type/src/data-structures/diagrams/README.md +5 -0
  22. package/backup/recursive-type/src/data-structures/graph/abstract-graph.ts +985 -0
  23. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-list-pros-cons.jpg +0 -0
  24. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-list.jpg +0 -0
  25. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-matrix-pros-cons.jpg +0 -0
  26. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-matrix.jpg +0 -0
  27. package/backup/recursive-type/src/data-structures/graph/diagrams/dfs-can-do.jpg +0 -0
  28. package/backup/recursive-type/src/data-structures/graph/diagrams/edge-list-pros-cons.jpg +0 -0
  29. package/backup/recursive-type/src/data-structures/graph/diagrams/edge-list.jpg +0 -0
  30. package/backup/recursive-type/src/data-structures/graph/diagrams/max-flow.jpg +0 -0
  31. package/backup/recursive-type/src/data-structures/graph/diagrams/mst.jpg +0 -0
  32. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan-articulation-point-bridge.png +0 -0
  33. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan-complicate-simple.png +0 -0
  34. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan-strongly-connected-component.png +0 -0
  35. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan.mp4 +0 -0
  36. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan.webp +0 -0
  37. package/backup/recursive-type/src/data-structures/graph/directed-graph.ts +478 -0
  38. package/backup/recursive-type/src/data-structures/graph/index.ts +3 -0
  39. package/backup/recursive-type/src/data-structures/graph/undirected-graph.ts +293 -0
  40. package/backup/recursive-type/src/data-structures/hash/coordinate-map.ts +67 -0
  41. package/backup/recursive-type/src/data-structures/hash/coordinate-set.ts +56 -0
  42. package/backup/recursive-type/src/data-structures/hash/hash-table.ts +3 -0
  43. package/backup/recursive-type/src/data-structures/hash/index.ts +6 -0
  44. package/backup/recursive-type/src/data-structures/hash/pair.ts +3 -0
  45. package/backup/recursive-type/src/data-structures/hash/tree-map.ts +3 -0
  46. package/backup/recursive-type/src/data-structures/hash/tree-set.ts +3 -0
  47. package/backup/recursive-type/src/data-structures/heap/heap.ts +176 -0
  48. package/backup/recursive-type/src/data-structures/heap/index.ts +3 -0
  49. package/backup/recursive-type/src/data-structures/heap/max-heap.ts +31 -0
  50. package/backup/recursive-type/src/data-structures/heap/min-heap.ts +34 -0
  51. package/backup/recursive-type/src/data-structures/index.ts +15 -0
  52. package/backup/recursive-type/src/data-structures/interfaces/abstract-graph.ts +42 -0
  53. package/backup/recursive-type/src/data-structures/interfaces/avl-tree.ts +1 -0
  54. package/backup/recursive-type/src/data-structures/interfaces/binary-tree.ts +56 -0
  55. package/backup/recursive-type/src/data-structures/interfaces/bst.ts +1 -0
  56. package/backup/recursive-type/src/data-structures/interfaces/directed-graph.ts +15 -0
  57. package/backup/recursive-type/src/data-structures/interfaces/doubly-linked-list.ts +1 -0
  58. package/backup/recursive-type/src/data-structures/interfaces/heap.ts +1 -0
  59. package/backup/recursive-type/src/data-structures/interfaces/index.ts +13 -0
  60. package/backup/recursive-type/src/data-structures/interfaces/navigator.ts +1 -0
  61. package/backup/recursive-type/src/data-structures/interfaces/priority-queue.ts +1 -0
  62. package/backup/recursive-type/src/data-structures/interfaces/segment-tree.ts +1 -0
  63. package/backup/recursive-type/src/data-structures/interfaces/singly-linked-list.ts +1 -0
  64. package/backup/recursive-type/src/data-structures/interfaces/tree-multiset.ts +1 -0
  65. package/backup/recursive-type/src/data-structures/interfaces/undirected-graph.ts +3 -0
  66. package/backup/recursive-type/src/data-structures/linked-list/doubly-linked-list.ts +573 -0
  67. package/backup/recursive-type/src/data-structures/linked-list/index.ts +3 -0
  68. package/backup/recursive-type/src/data-structures/linked-list/singly-linked-list.ts +490 -0
  69. package/backup/recursive-type/src/data-structures/linked-list/skip-linked-list.ts +3 -0
  70. package/backup/recursive-type/src/data-structures/matrix/index.ts +4 -0
  71. package/backup/recursive-type/src/data-structures/matrix/matrix.ts +27 -0
  72. package/backup/recursive-type/src/data-structures/matrix/matrix2d.ts +208 -0
  73. package/backup/recursive-type/src/data-structures/matrix/navigator.ts +122 -0
  74. package/backup/recursive-type/src/data-structures/matrix/vector2d.ts +316 -0
  75. package/backup/recursive-type/src/data-structures/priority-queue/index.ts +3 -0
  76. package/backup/recursive-type/src/data-structures/priority-queue/max-priority-queue.ts +49 -0
  77. package/backup/recursive-type/src/data-structures/priority-queue/min-priority-queue.ts +50 -0
  78. package/backup/recursive-type/src/data-structures/priority-queue/priority-queue.ts +354 -0
  79. package/backup/recursive-type/src/data-structures/queue/deque.ts +251 -0
  80. package/backup/recursive-type/src/data-structures/queue/index.ts +2 -0
  81. package/backup/recursive-type/src/data-structures/queue/queue.ts +120 -0
  82. package/backup/recursive-type/src/data-structures/stack/index.ts +1 -0
  83. package/backup/recursive-type/src/data-structures/stack/stack.ts +98 -0
  84. package/backup/recursive-type/src/data-structures/tree/index.ts +1 -0
  85. package/backup/recursive-type/src/data-structures/tree/tree.ts +80 -0
  86. package/backup/recursive-type/src/data-structures/trie/index.ts +1 -0
  87. package/backup/recursive-type/src/data-structures/trie/trie.ts +227 -0
  88. package/backup/recursive-type/src/data-structures/types/abstract-graph.ts +5 -0
  89. package/backup/recursive-type/src/data-structures/types/avl-tree.ts +8 -0
  90. package/backup/recursive-type/src/data-structures/types/binary-tree.ts +10 -0
  91. package/backup/recursive-type/src/data-structures/types/bst.ts +6 -0
  92. package/backup/recursive-type/src/data-structures/types/directed-graph.ts +8 -0
  93. package/backup/recursive-type/src/data-structures/types/doubly-linked-list.ts +1 -0
  94. package/backup/recursive-type/src/data-structures/types/heap.ts +5 -0
  95. package/backup/recursive-type/src/data-structures/types/index.ts +12 -0
  96. package/backup/recursive-type/src/data-structures/types/navigator.ts +13 -0
  97. package/backup/recursive-type/src/data-structures/types/priority-queue.ts +9 -0
  98. package/backup/recursive-type/src/data-structures/types/segment-tree.ts +1 -0
  99. package/backup/recursive-type/src/data-structures/types/singly-linked-list.ts +1 -0
  100. package/backup/recursive-type/src/data-structures/types/tree-multiset.ts +1 -0
  101. package/backup/recursive-type/src/index.ts +1 -0
  102. package/backup/recursive-type/src/utils/index.ts +2 -0
  103. package/backup/recursive-type/src/utils/types/index.ts +1 -0
  104. package/backup/recursive-type/src/utils/types/utils.ts +6 -0
  105. package/backup/recursive-type/src/utils/utils.ts +78 -0
  106. package/dist/data-structures/binary-tree/avl-tree.d.ts +19 -25
  107. package/dist/data-structures/binary-tree/avl-tree.js +8 -16
  108. package/dist/data-structures/binary-tree/binary-tree.d.ts +99 -98
  109. package/dist/data-structures/binary-tree/binary-tree.js +70 -65
  110. package/dist/data-structures/binary-tree/bst.d.ts +21 -21
  111. package/dist/data-structures/binary-tree/bst.js +15 -17
  112. package/dist/data-structures/binary-tree/rb-tree.d.ts +1 -2
  113. package/dist/data-structures/binary-tree/rb-tree.js +68 -5
  114. package/dist/data-structures/binary-tree/tree-multiset.d.ts +9 -8
  115. package/dist/data-structures/binary-tree/tree-multiset.js +7 -6
  116. package/dist/data-structures/graph/abstract-graph.d.ts +56 -58
  117. package/dist/data-structures/graph/abstract-graph.js +84 -68
  118. package/dist/data-structures/graph/directed-graph.d.ts +127 -96
  119. package/dist/data-structures/graph/directed-graph.js +161 -109
  120. package/dist/data-structures/graph/undirected-graph.d.ts +82 -59
  121. package/dist/data-structures/graph/undirected-graph.js +99 -72
  122. package/dist/data-structures/hash/coordinate-set.d.ts +1 -1
  123. package/dist/data-structures/index.d.ts +1 -0
  124. package/dist/data-structures/index.js +1 -0
  125. package/dist/data-structures/interfaces/abstract-graph.d.ts +22 -0
  126. package/dist/data-structures/interfaces/abstract-graph.js +2 -0
  127. package/dist/data-structures/interfaces/avl-tree.d.ts +1 -0
  128. package/dist/data-structures/interfaces/avl-tree.js +2 -0
  129. package/dist/data-structures/interfaces/binary-tree.d.ts +27 -0
  130. package/dist/data-structures/interfaces/binary-tree.js +2 -0
  131. package/dist/data-structures/interfaces/bst.d.ts +1 -0
  132. package/dist/data-structures/interfaces/bst.js +2 -0
  133. package/dist/data-structures/interfaces/directed-graph.d.ts +9 -0
  134. package/dist/data-structures/interfaces/directed-graph.js +2 -0
  135. package/dist/data-structures/interfaces/doubly-linked-list.d.ts +1 -0
  136. package/dist/data-structures/interfaces/doubly-linked-list.js +2 -0
  137. package/dist/data-structures/interfaces/heap.d.ts +1 -0
  138. package/dist/data-structures/interfaces/heap.js +2 -0
  139. package/dist/data-structures/interfaces/index.d.ts +13 -0
  140. package/dist/data-structures/interfaces/index.js +29 -0
  141. package/dist/data-structures/interfaces/navigator.d.ts +1 -0
  142. package/dist/data-structures/interfaces/navigator.js +2 -0
  143. package/dist/data-structures/interfaces/priority-queue.d.ts +1 -0
  144. package/dist/data-structures/interfaces/priority-queue.js +2 -0
  145. package/dist/data-structures/interfaces/segment-tree.d.ts +1 -0
  146. package/dist/data-structures/interfaces/segment-tree.js +2 -0
  147. package/dist/data-structures/interfaces/singly-linked-list.d.ts +1 -0
  148. package/dist/data-structures/interfaces/singly-linked-list.js +2 -0
  149. package/dist/data-structures/interfaces/tree-multiset.d.ts +1 -0
  150. package/dist/data-structures/interfaces/tree-multiset.js +2 -0
  151. package/dist/data-structures/interfaces/undirected-graph.d.ts +2 -0
  152. package/dist/data-structures/interfaces/undirected-graph.js +2 -0
  153. package/dist/data-structures/linked-list/doubly-linked-list.d.ts +1 -1
  154. package/dist/data-structures/linked-list/singly-linked-list.d.ts +1 -1
  155. package/dist/data-structures/priority-queue/priority-queue.d.ts +1 -1
  156. package/dist/data-structures/priority-queue/priority-queue.js +4 -4
  157. package/dist/data-structures/queue/deque.d.ts +5 -5
  158. package/dist/data-structures/queue/deque.js +6 -6
  159. package/dist/data-structures/queue/queue.d.ts +1 -1
  160. package/dist/data-structures/stack/stack.d.ts +1 -1
  161. package/dist/data-structures/types/abstract-graph.d.ts +1 -20
  162. package/dist/data-structures/types/avl-tree.d.ts +5 -4
  163. package/dist/data-structures/types/binary-tree.d.ts +6 -5
  164. package/dist/data-structures/types/bst.d.ts +4 -3
  165. package/dist/data-structures/types/directed-graph.d.ts +5 -9
  166. package/dist/data-structures/types/directed-graph.js +7 -0
  167. package/dist/data-structures/types/heap.d.ts +2 -2
  168. package/dist/data-structures/types/index.d.ts +0 -1
  169. package/dist/data-structures/types/index.js +0 -1
  170. package/dist/data-structures/types/navigator.d.ts +2 -2
  171. package/dist/data-structures/types/priority-queue.d.ts +2 -2
  172. package/dist/data-structures/types/tree-multiset.d.ts +3 -4
  173. package/docs/assets/search.js +1 -1
  174. package/docs/classes/AVLTree.html +288 -287
  175. package/docs/classes/AVLTreeNode.html +106 -63
  176. package/docs/classes/AaTree.html +14 -12
  177. package/docs/classes/AbstractEdge.html +68 -34
  178. package/docs/classes/AbstractGraph.html +219 -114
  179. package/docs/classes/AbstractVertex.html +71 -30
  180. package/docs/classes/ArrayDeque.html +27 -25
  181. package/docs/classes/BST.html +279 -273
  182. package/docs/classes/BSTNode.html +106 -57
  183. package/docs/classes/BTree.html +14 -12
  184. package/docs/classes/BinaryIndexedTree.html +22 -20
  185. package/docs/classes/BinaryTree.html +283 -277
  186. package/docs/classes/BinaryTreeNode.html +111 -63
  187. package/docs/classes/Character.html +17 -15
  188. package/docs/classes/CoordinateMap.html +22 -20
  189. package/docs/classes/CoordinateSet.html +23 -21
  190. package/docs/classes/Deque.html +47 -45
  191. package/docs/classes/DirectedEdge.html +74 -41
  192. package/docs/classes/DirectedGraph.html +444 -208
  193. package/docs/classes/DirectedVertex.html +63 -36
  194. package/docs/classes/DoublyLinkedList.html +52 -50
  195. package/docs/classes/DoublyLinkedListNode.html +24 -22
  196. package/docs/classes/HashTable.html +14 -12
  197. package/docs/classes/Heap.html +29 -27
  198. package/docs/classes/HeapItem.html +21 -19
  199. package/docs/classes/Matrix2D.html +29 -27
  200. package/docs/classes/MatrixNTI2D.html +17 -15
  201. package/docs/classes/MaxHeap.html +29 -27
  202. package/docs/classes/MaxPriorityQueue.html +67 -60
  203. package/docs/classes/MinHeap.html +29 -27
  204. package/docs/classes/MinPriorityQueue.html +67 -60
  205. package/docs/classes/Navigator.html +24 -22
  206. package/docs/classes/ObjectDeque.html +62 -50
  207. package/docs/classes/Pair.html +14 -12
  208. package/docs/classes/PriorityQueue.html +62 -55
  209. package/docs/classes/Queue.html +29 -27
  210. package/docs/classes/SegmentTree.html +30 -28
  211. package/docs/classes/SegmentTreeNode.html +33 -31
  212. package/docs/classes/SinglyLinkedList.html +49 -47
  213. package/docs/classes/SinglyLinkedListNode.html +21 -19
  214. package/docs/classes/SkipLinkedList.html +14 -12
  215. package/docs/classes/SplayTree.html +14 -12
  216. package/docs/classes/Stack.html +27 -25
  217. package/docs/classes/TreeMap.html +14 -12
  218. package/docs/classes/TreeMultiSet.html +277 -270
  219. package/docs/classes/TreeNode.html +29 -27
  220. package/docs/classes/TreeSet.html +14 -12
  221. package/docs/classes/Trie.html +26 -24
  222. package/docs/classes/TrieNode.html +24 -22
  223. package/docs/classes/TwoThreeTree.html +14 -12
  224. package/docs/classes/UndirectedEdge.html +70 -51
  225. package/docs/classes/UndirectedGraph.html +344 -161
  226. package/docs/classes/UndirectedVertex.html +63 -36
  227. package/docs/classes/Vector2D.html +41 -39
  228. package/docs/enums/CP.html +17 -15
  229. package/docs/enums/FamilyPosition.html +17 -15
  230. package/docs/enums/LoopType.html +16 -14
  231. package/docs/{interfaces/AVLTreeDeleted.html → enums/TopologicalProperty.html} +43 -43
  232. package/docs/index.html +195 -68
  233. package/docs/interfaces/{HeapOptions.html → IBinaryTree.html} +39 -32
  234. package/docs/interfaces/IBinaryTreeNode.html +383 -0
  235. package/docs/interfaces/IDirectedGraph.html +20 -18
  236. package/docs/interfaces/IGraph.html +118 -88
  237. package/docs/interfaces/{PriorityQueueOptions.html → IUNDirectedGraph.html} +22 -53
  238. package/docs/modules.html +25 -21
  239. package/docs/types/{ToThunkFn.html → AVLTreeDeleted.html} +27 -21
  240. package/docs/types/BSTComparator.html +14 -12
  241. package/docs/types/BSTDeletedResult.html +19 -17
  242. package/docs/types/BinaryTreeDeleted.html +19 -17
  243. package/docs/types/BinaryTreeNodeId.html +14 -12
  244. package/docs/types/BinaryTreeNodePropertyName.html +14 -12
  245. package/docs/types/DFSOrderPattern.html +14 -12
  246. package/docs/types/DijkstraResult.html +14 -12
  247. package/docs/types/Direction.html +14 -12
  248. package/docs/types/{TrlFn.html → EdgeId.html} +18 -29
  249. package/docs/types/{TrlAsyncFn.html → HeapOptions.html} +29 -19
  250. package/docs/types/NavigatorParams.html +164 -0
  251. package/docs/types/NodeOrPropertyName.html +14 -12
  252. package/docs/types/PriorityQueueComparator.html +14 -12
  253. package/docs/types/PriorityQueueDFSOrderPattern.html +14 -12
  254. package/docs/types/{SpecifyOptional.html → PriorityQueueOptions.html} +28 -19
  255. package/docs/types/RecursiveAVLTreeNode.html +135 -0
  256. package/docs/types/{Thunk.html → RecursiveBSTNode.html} +23 -24
  257. package/docs/types/RecursiveBinaryTreeNode.html +135 -0
  258. package/docs/types/ResultByProperty.html +17 -15
  259. package/docs/types/ResultsByProperty.html +17 -15
  260. package/docs/types/SegmentTreeNodeVal.html +14 -12
  261. package/docs/types/TopologicalStatus.html +14 -12
  262. package/docs/types/TreeMultiSetDeletedResult.html +19 -17
  263. package/docs/types/Turning.html +14 -12
  264. package/docs/types/VertexId.html +14 -12
  265. package/notes/note.md +8 -1
  266. package/package.json +10 -2
  267. package/docs/classes/RBTree.html +0 -153
  268. package/docs/interfaces/NavigatorParams.html +0 -200
@@ -0,0 +1,227 @@
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Tyler Zeng
5
+ * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
+ * @license MIT License
7
+ */
8
+ export class TrieNode {
9
+
10
+ constructor(v: string) {
11
+ this._val = v;
12
+ this._isEnd = false;
13
+ this._children = new Map<string, TrieNode>();
14
+ }
15
+
16
+ private _val;
17
+
18
+ get val(): string {
19
+ return this._val;
20
+ }
21
+
22
+ set val(v: string) {
23
+ this._val = v;
24
+ }
25
+
26
+ protected _children: Map<string, TrieNode>;
27
+
28
+ get children(): Map<string, TrieNode> {
29
+ return this._children;
30
+ }
31
+
32
+ set children(v: Map<string, TrieNode>) {
33
+ this._children = v;
34
+ }
35
+
36
+ protected _isEnd: boolean;
37
+
38
+ get isEnd(): boolean {
39
+ return this._isEnd;
40
+ }
41
+
42
+ set isEnd(v: boolean) {
43
+ this._isEnd = v;
44
+ }
45
+
46
+ }
47
+
48
+ export class Trie {
49
+ constructor(words?: string[]) {
50
+ this._root = new TrieNode('');
51
+ if (words) {
52
+ for (const i of words) {
53
+ this.add(i);
54
+ }
55
+ }
56
+ }
57
+
58
+ protected _root: TrieNode;
59
+
60
+ get root() {
61
+ return this._root;
62
+ }
63
+
64
+ set root(v: TrieNode) {
65
+ this._root = v;
66
+ }
67
+
68
+ add(word: string): boolean {
69
+ let cur = this._root;
70
+ for (const c of word) {
71
+ let nodeC = cur.children.get(c);
72
+ if (!nodeC) {
73
+ nodeC = new TrieNode(c);
74
+ cur.children.set(c, nodeC);
75
+ }
76
+ cur = nodeC;
77
+ }
78
+ cur.isEnd = true;
79
+ return true;
80
+ }
81
+
82
+ has(input: string): boolean {
83
+ let cur = this._root;
84
+ for (const c of input) {
85
+ const nodeC = cur.children.get(c);
86
+ if (!nodeC) return false;
87
+ cur = nodeC;
88
+ }
89
+ return cur.isEnd;
90
+ }
91
+
92
+ remove(word: string) {
93
+ let isDeleted = false;
94
+ const dfs = (cur: TrieNode, i: number): boolean => {
95
+ const char = word[i];
96
+ const child = cur.children.get(char);
97
+ if (child) {
98
+ if (i === word.length - 1) {
99
+ if (child.isEnd) {
100
+ if (child.children.size > 0) {
101
+ child.isEnd = false;
102
+ } else {
103
+ cur.children.delete(char);
104
+ }
105
+ isDeleted = true;
106
+ return true;
107
+ }
108
+ return false;
109
+ }
110
+ const res = dfs(child, i + 1);
111
+ if (res && !cur.isEnd && child.children.size === 0) {
112
+ cur.children.delete(char);
113
+ return true;
114
+ }
115
+ return false;
116
+ }
117
+ return false;
118
+ }
119
+
120
+ dfs(this.root, 0);
121
+ return isDeleted;
122
+ }
123
+
124
+ // --- start additional methods ---
125
+ /**
126
+ * The function checks if a given input string has an absolute prefix in a tree data structure.Only can present as a prefix, not a word
127
+ * @param {string} input - The input parameter is a string that represents the input value for the function.
128
+ * @returns a boolean value.
129
+ */
130
+ isAbsPrefix(input: string): boolean {
131
+ let cur = this._root;
132
+ for (const c of input) {
133
+ const nodeC = cur.children.get(c);
134
+ if (!nodeC) return false;
135
+ cur = nodeC;
136
+ }
137
+ return !cur.isEnd;
138
+ }
139
+
140
+ /**
141
+ * The function checks if a given input string is a prefix of any existing string in a tree structure.Can present as a abs prefix or word
142
+ * @param {string} input - The input parameter is a string that represents the prefix we want to check.
143
+ * @returns a boolean value.
144
+ */
145
+ isPrefix(input: string): boolean {
146
+ let cur = this._root;
147
+ for (const c of input) {
148
+ const nodeC = cur.children.get(c);
149
+ if (!nodeC) return false;
150
+ cur = nodeC;
151
+ }
152
+ return true;
153
+ }
154
+
155
+ /**
156
+ * The function checks if the input string is a common prefix in a Trie data structure.Check if the input string is the common prefix of all the words
157
+ * @param {string} input - The input parameter is a string that represents the common prefix that we want to check for
158
+ * in the Trie data structure.
159
+ * @returns a boolean value indicating whether the input string is a common prefix in the Trie data structure.
160
+ */
161
+ isCommonPrefix(input: string): boolean {
162
+ let commonPre = '';
163
+ const dfs = (cur: TrieNode) => {
164
+ commonPre += cur.val;
165
+ if (commonPre === input) return;
166
+ if (cur.isEnd) return;
167
+ if (cur && cur.children && cur.children.size === 1) dfs(Array.from(cur.children.values())[0]);
168
+ else return;
169
+ }
170
+ dfs(this._root);
171
+ return commonPre === input;
172
+ }
173
+
174
+ /**
175
+ * The function `getLongestCommonPrefix` returns the longest common prefix among all the words stored in a Trie data
176
+ * structure.
177
+ * @returns The function `getLongestCommonPrefix` returns a string, which is the longest common prefix found in the
178
+ * Trie.
179
+ */
180
+ getLongestCommonPrefix(): string {
181
+ let commonPre = '';
182
+ const dfs = (cur: TrieNode) => {
183
+ commonPre += cur.val;
184
+ if (cur.isEnd) return;
185
+ if (cur && cur.children && cur.children.size === 1) dfs(Array.from(cur.children.values())[0]);
186
+ else return;
187
+ }
188
+ dfs(this._root);
189
+ return commonPre;
190
+ }
191
+
192
+ /**
193
+ * The `getAll` function returns an array of all words in a Trie data structure that start with a given prefix.
194
+ * @param [prefix] - The `prefix` parameter is a string that represents the prefix that we want to search for in the
195
+ * trie. It is an optional parameter, so if no prefix is provided, it will default to an empty string.
196
+ * @returns an array of strings.
197
+ */
198
+ getAll(prefix = ''): string[] {
199
+ const words: string[] = [];
200
+
201
+ function dfs(node: TrieNode, word: string) {
202
+ for (const char of node.children.keys()) {
203
+ const charNode = node.children.get(char);
204
+ if (charNode !== undefined) {
205
+ dfs(charNode, word.concat(char));
206
+ }
207
+ }
208
+ if (node.isEnd) {
209
+ words.push(word);
210
+ }
211
+ }
212
+
213
+ let startNode = this._root;
214
+
215
+ if (prefix) {
216
+ for (const c of prefix) {
217
+ const nodeC = startNode.children.get(c);
218
+ if (nodeC) startNode = nodeC;
219
+ }
220
+ }
221
+
222
+ dfs(startNode, prefix);
223
+ return words;
224
+ }
225
+
226
+ // --- end additional methods ---
227
+ }
@@ -0,0 +1,5 @@
1
+ export type VertexId = string | number;
2
+ export type EdgeId = string;
3
+ export type DijkstraResult<V> =
4
+ { distMap: Map<V, number>, preMap: Map<V, V | null>, seen: Set<V>, paths: V[][], minDist: number, minPath: V[] }
5
+ | null;
@@ -0,0 +1,8 @@
1
+ import {AVLTreeNode} from '../binary-tree';
2
+
3
+ export type AVLTreeDeleted<N> = {
4
+ deleted: N | null;
5
+ needBalanced: N | null;
6
+ }
7
+
8
+ export type RecursiveAVLTreeNode<T> = AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T,AVLTreeNode<T,AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -0,0 +1,10 @@
1
+ import {BinaryTreeNode} from '../binary-tree';
2
+
3
+ export type BinaryTreeNodePropertyName = 'id' | 'val' | 'count';
4
+ export type NodeOrPropertyName = 'node' | BinaryTreeNodePropertyName;
5
+ export type DFSOrderPattern = 'in' | 'pre' | 'post';
6
+ export type BinaryTreeNodeId = number;
7
+ export type BinaryTreeDeleted<N> = { deleted: N | null | undefined, needBalanced: N | null };
8
+ export type ResultByProperty<N extends BinaryTreeNode<N['val'], N>> = N['val'] | N | number | BinaryTreeNodeId;
9
+ export type ResultsByProperty<N extends BinaryTreeNode<N['val'], N>> = ResultByProperty<N>[];
10
+ export type RecursiveBinaryTreeNode<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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -0,0 +1,6 @@
1
+ import {BSTNode} from '../binary-tree';
2
+ import type {BinaryTreeNodeId} from './binary-tree';
3
+
4
+ export type BSTComparator = (a: BinaryTreeNodeId, b: BinaryTreeNodeId) => number;
5
+ export type BSTDeletedResult<N extends BSTNode<N['val'], N>> = { deleted: N | null, needBalanced: N | null };
6
+ export type RecursiveBSTNode<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, BSTNode<T, BSTNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
@@ -0,0 +1,8 @@
1
+ // 0 means unknown, 1 means visiting, 2 means visited;
2
+ export type TopologicalStatus = 0 | 1 | 2;
3
+
4
+ export enum TopologicalProperty {
5
+ VAL = 'VAL',
6
+ NODE = 'NODE',
7
+ ID = 'ID',
8
+ }
@@ -0,0 +1,5 @@
1
+ export type HeapOptions<T> = {
2
+ priority?: (element: T) => number;
3
+ // TODO there is an idea that support chaining which is for conveniently using the data structure
4
+ // isChaining? : boolean
5
+ }
@@ -0,0 +1,12 @@
1
+ export * from './binary-tree';
2
+ export * from './bst';
3
+ export * from './avl-tree';
4
+ export * from './segment-tree';
5
+ export * from './tree-multiset';
6
+ export * from './abstract-graph';
7
+ export * from './directed-graph';
8
+ export * from './priority-queue';
9
+ export * from './heap';
10
+ export * from './singly-linked-list';
11
+ export * from './doubly-linked-list';
12
+ export * from './navigator';
@@ -0,0 +1,13 @@
1
+ export type Direction = 'up' | 'right' | 'down' | 'left';
2
+ export type Turning = { [key in Direction]: Direction };
3
+
4
+ export type NavigatorParams<T> = {
5
+ matrix: T[][],
6
+ turning: Turning,
7
+ onMove: (cur: [number, number]) => void
8
+ init: {
9
+ cur: [number, number],
10
+ charDir: Direction,
11
+ VISITED: T,
12
+ }
13
+ }
@@ -0,0 +1,9 @@
1
+ export type PriorityQueueComparator<T> = (a: T, b: T) => number;
2
+
3
+ export type PriorityQueueOptions<T> = {
4
+ nodes?: T[];
5
+ isFix?: boolean;
6
+ comparator: PriorityQueueComparator<T>;
7
+ }
8
+
9
+ export type PriorityQueueDFSOrderPattern = 'pre' | 'in' | 'post';
@@ -0,0 +1 @@
1
+ export type SegmentTreeNodeVal = number;
@@ -0,0 +1 @@
1
+ export type TreeMultiSetDeletedResult<N> = { deleted: N | null, needBalanced: N | null };
@@ -0,0 +1 @@
1
+ export * from './data-structures';
@@ -0,0 +1,2 @@
1
+ export * from './utils';
2
+ export * from './types';
@@ -0,0 +1 @@
1
+ export * from './utils';
@@ -0,0 +1,6 @@
1
+ export type ToThunkFn = () => ReturnType<TrlFn>;
2
+ export type Thunk = () => ReturnType<ToThunkFn> & { __THUNK__: Symbol };
3
+ export type TrlFn = (...args: any[]) => any;
4
+ export type TrlAsyncFn = (...args: any[]) => any;
5
+
6
+ export type SpecifyOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
@@ -0,0 +1,78 @@
1
+ export const uuidV4 = function () {
2
+ return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function (c) {
3
+ const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
4
+ return v.toString(16);
5
+ });
6
+ };
7
+
8
+ export const arrayRemove = function <T>(array: T[], predicate: (item: T, index: number, array: T[]) => boolean): T[] {
9
+ let i = -1, len = array ? array.length : 0;
10
+ const result = [];
11
+
12
+ while (++i < len) {
13
+ const value = array[i];
14
+ if (predicate(value, i, array)) {
15
+ result.push(value);
16
+ Array.prototype.splice.call(array, i--, 1);
17
+ len--;
18
+ }
19
+ }
20
+
21
+ return result;
22
+ };
23
+
24
+
25
+ /**
26
+ * data-structure-typed
27
+ *
28
+ * @author Tyler Zeng
29
+ * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
30
+ * @license MIT License
31
+ */
32
+ import type {Thunk, ToThunkFn, TrlAsyncFn, TrlFn} from './types';
33
+
34
+ export const THUNK_SYMBOL = Symbol('thunk')
35
+
36
+ export const isThunk = (fnOrValue: any) => {
37
+ return typeof fnOrValue === 'function' && fnOrValue.__THUNK__ === THUNK_SYMBOL
38
+ }
39
+
40
+ export const toThunk = (fn: ToThunkFn): Thunk => {
41
+ const thunk = () => fn()
42
+ thunk.__THUNK__ = THUNK_SYMBOL
43
+ return thunk
44
+ }
45
+
46
+ export const trampoline = (fn: TrlFn) => {
47
+ const cont = (...args: [...Parameters<TrlFn>]) => toThunk(() => fn(...args))
48
+
49
+ return Object.assign(
50
+ (...args: [...Parameters<TrlFn>]) => {
51
+ let result = fn(...args)
52
+
53
+ while (isThunk(result) && typeof result === 'function') {
54
+ result = result()
55
+ }
56
+
57
+ return result
58
+ },
59
+ {cont}
60
+ )
61
+ }
62
+
63
+ export const trampolineAsync = (fn: TrlAsyncFn) => {
64
+ const cont = (...args: [...Parameters<TrlAsyncFn>]) => toThunk(() => fn(...args))
65
+
66
+ return Object.assign(
67
+ async (...args: [...Parameters<TrlAsyncFn>]) => {
68
+ let result = await fn(...args)
69
+
70
+ while (isThunk(result) && typeof result === 'function') {
71
+ result = await result()
72
+ }
73
+
74
+ return result
75
+ },
76
+ {cont}
77
+ )
78
+ }
@@ -6,31 +6,25 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import { BST, BSTNode } from './bst';
9
- import type { AVLTreeDeleted, BinaryTreeNodeId } from '../types';
10
- export declare class AVLTreeNode<T> extends BSTNode<T> {
11
- /**
12
- * The function overrides the clone method of the AVLTreeNode class to create a new AVLTreeNode object with the same
13
- * id, value, and count.
14
- * @returns The method is returning a new instance of the AVLTreeNode class with the same id, val, and count values as
15
- * the current instance.
16
- */
17
- clone(): AVLTreeNode<T>;
9
+ import type { AVLTreeDeleted, BinaryTreeNodeId, RecursiveAVLTreeNode } from '../types';
10
+ import { IBinaryTreeNode } from '../interfaces';
11
+ export declare class AVLTreeNode<T, FAMILY extends AVLTreeNode<T, FAMILY> = RecursiveAVLTreeNode<T>> extends BSTNode<T, FAMILY> implements IBinaryTreeNode<T, FAMILY> {
18
12
  }
19
- export declare class AVLTree<T> extends BST<T> {
20
- createNode(id: BinaryTreeNodeId, val: T, count?: number): AVLTreeNode<T>;
13
+ export declare class AVLTree<N extends AVLTreeNode<N['val'], N> = AVLTreeNode<number>> extends BST<N> {
14
+ _createNode(id: BinaryTreeNodeId, val: N['val'], count?: number): N;
21
15
  /**
22
16
  * The function overrides the add method of a Binary Search Tree to insert a node with a given id and value, and then
23
17
  * balances the tree.
24
18
  * @param {BinaryTreeNodeId} id - The `id` parameter is the identifier of the binary tree node that we want to add or
25
19
  * update in the AVL tree.
26
- * @param {T | null} val - The `val` parameter represents the value that you want to assign to the node with the given
27
- * `id`. It can be of type `T` (the generic type) or `null`.
20
+ * @param {N | null} val - The `val` parameter represents the value that you want to assign to the node with the given
21
+ * `id`. It can be of type `N` (the generic type) or `null`.
28
22
  * @param {number} [count] - The `count` parameter is an optional parameter of type `number`. It represents the number
29
23
  * of times the value `val` should be inserted into the AVL tree. If the `count` parameter is not provided, it defaults
30
24
  * to `1`, indicating that the value should be inserted once.
31
- * @returns The method is returning either an AVLTreeNode<T> object or null.
25
+ * @returns The method is returning either an N object or null.
32
26
  */
33
- add(id: BinaryTreeNodeId, val: T | null, count?: number): AVLTreeNode<T> | null;
27
+ add(id: BinaryTreeNodeId, val: N['val'] | null, count?: number): N | null;
34
28
  /**
35
29
  * The function overrides the remove method of the Binary Search Tree class, performs the removal operation, and
36
30
  * then balances the tree if necessary.
@@ -39,45 +33,45 @@ export declare class AVLTree<T> extends BST<T> {
39
33
  * @param {boolean} [isUpdateAllLeftSum] - The `isUpdateAllLeftSum` parameter is an optional boolean parameter that
40
34
  * determines whether the left sum of all nodes in the AVL tree should be updated after removing a node. If
41
35
  * `isUpdateAllLeftSum` is set to `true`, the left sum of all nodes will be recalculated.
42
- * @returns The method is returning an array of `AVLTreeDeleted<T>` objects.
36
+ * @returns The method is returning an array of `AVLTreeDeleted<N>` objects.
43
37
  */
44
- remove(id: BinaryTreeNodeId, isUpdateAllLeftSum?: boolean): AVLTreeDeleted<T>[];
38
+ remove(id: BinaryTreeNodeId, isUpdateAllLeftSum?: boolean): AVLTreeDeleted<N>[];
45
39
  /**
46
40
  * The balance factor of a given AVL tree node is calculated by subtracting the height of its left subtree from the
47
41
  * height of its right subtree.
48
- * @param node - The parameter "node" is of type AVLTreeNode<T>, which represents a node in an AVL tree.
42
+ * @param node - The parameter "node" is of type N, which represents a node in an AVL tree.
49
43
  * @returns The balance factor of the given AVL tree node.
50
44
  */
51
- balanceFactor(node: AVLTreeNode<T>): number;
45
+ balanceFactor(node: N): number;
52
46
  /**
53
47
  * The function updates the height of a node in an AVL tree based on the heights of its left and right subtrees.
54
48
  * @param node - The parameter `node` is an AVLTreeNode object, which represents a node in an AVL tree.
55
49
  */
56
- updateHeight(node: AVLTreeNode<T>): void;
50
+ updateHeight(node: N): void;
57
51
  /**
58
52
  * The `balancePath` function balances the AVL tree by performing appropriate rotations based on the balance factor of
59
53
  * each node in the path from the given node to the root.
60
54
  * @param node - The `node` parameter is an AVLTreeNode object, which represents a node in an AVL tree.
61
55
  */
62
- balancePath(node: AVLTreeNode<T>): void;
56
+ balancePath(node: N): void;
63
57
  /**
64
58
  * The `balanceLL` function performs a left-left rotation on an AVL tree to balance it.
65
59
  * @param A - The parameter A is an AVLTreeNode object.
66
60
  */
67
- balanceLL(A: AVLTreeNode<T>): void;
61
+ balanceLL(A: N): void;
68
62
  /**
69
63
  * The `balanceLR` function performs a left-right rotation to balance an AVL tree.
70
64
  * @param A - A is an AVLTreeNode object.
71
65
  */
72
- balanceLR(A: AVLTreeNode<T>): void;
66
+ balanceLR(A: N): void;
73
67
  /**
74
68
  * The `balanceRR` function performs a right-right rotation on an AVL tree to balance it.
75
69
  * @param A - The parameter A is an AVLTreeNode object.
76
70
  */
77
- balanceRR(A: AVLTreeNode<T>): void;
71
+ balanceRR(A: N): void;
78
72
  /**
79
73
  * The `balanceRL` function performs a right-left rotation to balance an AVL tree.
80
74
  * @param A - A is an AVLTreeNode object.
81
75
  */
82
- balanceRL(A: AVLTreeNode<T>): void;
76
+ balanceRL(A: N): void;
83
77
  }
@@ -40,15 +40,6 @@ var AVLTreeNode = /** @class */ (function (_super) {
40
40
  function AVLTreeNode() {
41
41
  return _super !== null && _super.apply(this, arguments) || this;
42
42
  }
43
- /**
44
- * The function overrides the clone method of the AVLTreeNode class to create a new AVLTreeNode object with the same
45
- * id, value, and count.
46
- * @returns The method is returning a new instance of the AVLTreeNode class with the same id, val, and count values as
47
- * the current instance.
48
- */
49
- AVLTreeNode.prototype.clone = function () {
50
- return new AVLTreeNode(this.id, this.val, this.count);
51
- };
52
43
  return AVLTreeNode;
53
44
  }(bst_1.BSTNode));
54
45
  exports.AVLTreeNode = AVLTreeNode;
@@ -57,20 +48,21 @@ var AVLTree = /** @class */ (function (_super) {
57
48
  function AVLTree() {
58
49
  return _super !== null && _super.apply(this, arguments) || this;
59
50
  }
60
- AVLTree.prototype.createNode = function (id, val, count) {
61
- return new AVLTreeNode(id, val, count);
51
+ AVLTree.prototype._createNode = function (id, val, count) {
52
+ var node = new AVLTreeNode(id, val, count);
53
+ return node;
62
54
  };
63
55
  /**
64
56
  * The function overrides the add method of a Binary Search Tree to insert a node with a given id and value, and then
65
57
  * balances the tree.
66
58
  * @param {BinaryTreeNodeId} id - The `id` parameter is the identifier of the binary tree node that we want to add or
67
59
  * update in the AVL tree.
68
- * @param {T | null} val - The `val` parameter represents the value that you want to assign to the node with the given
69
- * `id`. It can be of type `T` (the generic type) or `null`.
60
+ * @param {N | null} val - The `val` parameter represents the value that you want to assign to the node with the given
61
+ * `id`. It can be of type `N` (the generic type) or `null`.
70
62
  * @param {number} [count] - The `count` parameter is an optional parameter of type `number`. It represents the number
71
63
  * of times the value `val` should be inserted into the AVL tree. If the `count` parameter is not provided, it defaults
72
64
  * to `1`, indicating that the value should be inserted once.
73
- * @returns The method is returning either an AVLTreeNode<T> object or null.
65
+ * @returns The method is returning either an N object or null.
74
66
  */
75
67
  AVLTree.prototype.add = function (id, val, count) {
76
68
  var inserted = _super.prototype.add.call(this, id, val, count);
@@ -86,7 +78,7 @@ var AVLTree = /** @class */ (function (_super) {
86
78
  * @param {boolean} [isUpdateAllLeftSum] - The `isUpdateAllLeftSum` parameter is an optional boolean parameter that
87
79
  * determines whether the left sum of all nodes in the AVL tree should be updated after removing a node. If
88
80
  * `isUpdateAllLeftSum` is set to `true`, the left sum of all nodes will be recalculated.
89
- * @returns The method is returning an array of `AVLTreeDeleted<T>` objects.
81
+ * @returns The method is returning an array of `AVLTreeDeleted<N>` objects.
90
82
  */
91
83
  AVLTree.prototype.remove = function (id, isUpdateAllLeftSum) {
92
84
  var e_1, _a;
@@ -111,7 +103,7 @@ var AVLTree = /** @class */ (function (_super) {
111
103
  /**
112
104
  * The balance factor of a given AVL tree node is calculated by subtracting the height of its left subtree from the
113
105
  * height of its right subtree.
114
- * @param node - The parameter "node" is of type AVLTreeNode<T>, which represents a node in an AVL tree.
106
+ * @param node - The parameter "node" is of type N, which represents a node in an AVL tree.
115
107
  * @returns The balance factor of the given AVL tree node.
116
108
  */
117
109
  AVLTree.prototype.balanceFactor = function (node) {