data-structure-typed 1.21.3 → 1.31.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 (560) hide show
  1. package/.auto-changelog +9 -0
  2. package/.auto-changelog-template.hbs +36 -0
  3. package/.eslintrc.js +61 -0
  4. package/.github/workflows/ci.yml +30 -0
  5. package/.prettierignore +6 -0
  6. package/.prettierrc.js +16 -0
  7. package/CHANGELOG.md +17 -0
  8. package/README.md +150 -98
  9. package/dist/data-structures/binary-tree/aa-tree.js +6 -2
  10. package/dist/data-structures/binary-tree/aa-tree.js.map +1 -0
  11. package/dist/data-structures/binary-tree/abstract-binary-tree.js +398 -672
  12. package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -0
  13. package/dist/data-structures/binary-tree/avl-tree.js +122 -151
  14. package/dist/data-structures/binary-tree/avl-tree.js.map +1 -0
  15. package/dist/data-structures/binary-tree/b-tree.js +6 -2
  16. package/dist/data-structures/binary-tree/b-tree.js.map +1 -0
  17. package/dist/data-structures/binary-tree/binary-indexed-tree.js +24 -54
  18. package/dist/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
  19. package/dist/data-structures/binary-tree/binary-tree.js +31 -32
  20. package/dist/data-structures/binary-tree/binary-tree.js.map +1 -0
  21. package/dist/data-structures/binary-tree/bst.js +266 -208
  22. package/dist/data-structures/binary-tree/bst.js.map +1 -0
  23. package/dist/data-structures/binary-tree/index.js +1 -0
  24. package/dist/data-structures/binary-tree/index.js.map +1 -0
  25. package/dist/data-structures/binary-tree/rb-tree.js +46 -37
  26. package/dist/data-structures/binary-tree/rb-tree.js.map +1 -0
  27. package/dist/data-structures/binary-tree/segment-tree.js +124 -127
  28. package/dist/data-structures/binary-tree/segment-tree.js.map +1 -0
  29. package/dist/data-structures/binary-tree/splay-tree.js +6 -2
  30. package/dist/data-structures/binary-tree/splay-tree.js.map +1 -0
  31. package/dist/data-structures/binary-tree/tree-multiset.js +227 -354
  32. package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -0
  33. package/dist/data-structures/binary-tree/two-three-tree.js +6 -2
  34. package/dist/data-structures/binary-tree/two-three-tree.js.map +1 -0
  35. package/dist/data-structures/graph/abstract-graph.js +582 -609
  36. package/dist/data-structures/graph/abstract-graph.js.map +1 -0
  37. package/dist/data-structures/graph/directed-graph.js +276 -312
  38. package/dist/data-structures/graph/directed-graph.js.map +1 -0
  39. package/dist/data-structures/graph/index.js +1 -0
  40. package/dist/data-structures/graph/index.js.map +1 -0
  41. package/dist/data-structures/graph/map-graph.js +88 -100
  42. package/dist/data-structures/graph/map-graph.js.map +1 -0
  43. package/dist/data-structures/graph/undirected-graph.js +180 -195
  44. package/dist/data-structures/graph/undirected-graph.js.map +1 -0
  45. package/dist/data-structures/hash/coordinate-map.js +46 -58
  46. package/dist/data-structures/hash/coordinate-map.js.map +1 -0
  47. package/dist/data-structures/hash/coordinate-set.js +43 -48
  48. package/dist/data-structures/hash/coordinate-set.js.map +1 -0
  49. package/dist/data-structures/hash/hash-table.js +6 -2
  50. package/dist/data-structures/hash/hash-table.js.map +1 -0
  51. package/dist/data-structures/hash/index.js +1 -0
  52. package/dist/data-structures/hash/index.js.map +1 -0
  53. package/dist/data-structures/hash/pair.js +6 -2
  54. package/dist/data-structures/hash/pair.js.map +1 -0
  55. package/dist/data-structures/hash/tree-map.js +6 -2
  56. package/dist/data-structures/hash/tree-map.js.map +1 -0
  57. package/dist/data-structures/hash/tree-set.js +6 -2
  58. package/dist/data-structures/hash/tree-set.js.map +1 -0
  59. package/dist/data-structures/heap/heap.js +83 -120
  60. package/dist/data-structures/heap/heap.js.map +1 -0
  61. package/dist/data-structures/heap/index.js +1 -0
  62. package/dist/data-structures/heap/index.js.map +1 -0
  63. package/dist/data-structures/heap/max-heap.js +27 -24
  64. package/dist/data-structures/heap/max-heap.js.map +1 -0
  65. package/dist/data-structures/heap/min-heap.js +27 -25
  66. package/dist/data-structures/heap/min-heap.js.map +1 -0
  67. package/dist/data-structures/index.js +1 -0
  68. package/dist/data-structures/index.js.map +1 -0
  69. package/dist/data-structures/linked-list/doubly-linked-list.js +202 -307
  70. package/dist/data-structures/linked-list/doubly-linked-list.js.map +1 -0
  71. package/dist/data-structures/linked-list/index.js +1 -0
  72. package/dist/data-structures/linked-list/index.js.map +1 -0
  73. package/dist/data-structures/linked-list/singly-linked-list.js +223 -251
  74. package/dist/data-structures/linked-list/singly-linked-list.js.map +1 -0
  75. package/dist/data-structures/linked-list/skip-linked-list.js +6 -2
  76. package/dist/data-structures/linked-list/skip-linked-list.js.map +1 -0
  77. package/dist/data-structures/matrix/index.js +1 -0
  78. package/dist/data-structures/matrix/index.js.map +1 -0
  79. package/dist/data-structures/matrix/matrix.js +9 -22
  80. package/dist/data-structures/matrix/matrix.js.map +1 -0
  81. package/dist/data-structures/matrix/matrix2d.js +75 -149
  82. package/dist/data-structures/matrix/matrix2d.js.map +1 -0
  83. package/dist/data-structures/matrix/navigator.js +38 -46
  84. package/dist/data-structures/matrix/navigator.js.map +1 -0
  85. package/dist/data-structures/matrix/vector2d.js +90 -254
  86. package/dist/data-structures/matrix/vector2d.js.map +1 -0
  87. package/dist/data-structures/priority-queue/index.js +1 -0
  88. package/dist/data-structures/priority-queue/index.js.map +1 -0
  89. package/dist/data-structures/priority-queue/max-priority-queue.js +47 -32
  90. package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -0
  91. package/dist/data-structures/priority-queue/min-priority-queue.js +47 -33
  92. package/dist/data-structures/priority-queue/min-priority-queue.js.map +1 -0
  93. package/dist/data-structures/priority-queue/priority-queue.js +150 -241
  94. package/dist/data-structures/priority-queue/priority-queue.js.map +1 -0
  95. package/dist/data-structures/queue/deque.js +130 -162
  96. package/dist/data-structures/queue/deque.js.map +1 -0
  97. package/dist/data-structures/queue/index.js +1 -0
  98. package/dist/data-structures/queue/index.js.map +1 -0
  99. package/dist/data-structures/queue/queue.js +181 -100
  100. package/dist/data-structures/queue/queue.js.map +1 -0
  101. package/dist/data-structures/stack/index.js +1 -0
  102. package/dist/data-structures/stack/index.js.map +1 -0
  103. package/dist/data-structures/stack/stack.js +23 -71
  104. package/dist/data-structures/stack/stack.js.map +1 -0
  105. package/dist/data-structures/tree/index.js +1 -0
  106. package/dist/data-structures/tree/index.js.map +1 -0
  107. package/dist/data-structures/tree/tree.js +46 -33
  108. package/dist/data-structures/tree/tree.js.map +1 -0
  109. package/dist/data-structures/trie/index.js +1 -0
  110. package/dist/data-structures/trie/index.js.map +1 -0
  111. package/dist/data-structures/trie/trie.js +201 -129
  112. package/dist/data-structures/trie/trie.js.map +1 -0
  113. package/dist/index.js +1 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/interfaces/abstract-binary-tree.js +1 -0
  116. package/dist/interfaces/abstract-binary-tree.js.map +1 -0
  117. package/dist/interfaces/abstract-graph.js +1 -0
  118. package/dist/interfaces/abstract-graph.js.map +1 -0
  119. package/dist/interfaces/avl-tree.js +1 -0
  120. package/dist/interfaces/avl-tree.js.map +1 -0
  121. package/dist/interfaces/binary-tree.js +1 -0
  122. package/dist/interfaces/binary-tree.js.map +1 -0
  123. package/dist/interfaces/bst.js +1 -0
  124. package/dist/interfaces/bst.js.map +1 -0
  125. package/dist/interfaces/directed-graph.js +1 -0
  126. package/dist/interfaces/directed-graph.js.map +1 -0
  127. package/dist/interfaces/doubly-linked-list.js +1 -0
  128. package/dist/interfaces/doubly-linked-list.js.map +1 -0
  129. package/dist/interfaces/heap.js +1 -0
  130. package/dist/interfaces/heap.js.map +1 -0
  131. package/dist/interfaces/index.js +1 -0
  132. package/dist/interfaces/index.js.map +1 -0
  133. package/dist/interfaces/navigator.js +1 -0
  134. package/dist/interfaces/navigator.js.map +1 -0
  135. package/dist/interfaces/priority-queue.js +1 -0
  136. package/dist/interfaces/priority-queue.js.map +1 -0
  137. package/dist/interfaces/rb-tree.js +1 -0
  138. package/dist/interfaces/rb-tree.js.map +1 -0
  139. package/dist/interfaces/segment-tree.js +1 -0
  140. package/dist/interfaces/segment-tree.js.map +1 -0
  141. package/dist/interfaces/singly-linked-list.js +1 -0
  142. package/dist/interfaces/singly-linked-list.js.map +1 -0
  143. package/dist/interfaces/tree-multiset.js +1 -0
  144. package/dist/interfaces/tree-multiset.js.map +1 -0
  145. package/dist/interfaces/undirected-graph.js +1 -0
  146. package/dist/interfaces/undirected-graph.js.map +1 -0
  147. package/dist/types/data-structures/abstract-binary-tree.js +1 -7
  148. package/dist/types/data-structures/abstract-binary-tree.js.map +1 -0
  149. package/dist/types/data-structures/abstract-graph.js +1 -0
  150. package/dist/types/data-structures/abstract-graph.js.map +1 -0
  151. package/dist/types/data-structures/avl-tree.js +1 -0
  152. package/dist/types/data-structures/avl-tree.js.map +1 -0
  153. package/dist/types/data-structures/binary-tree.js +1 -0
  154. package/dist/types/data-structures/binary-tree.js.map +1 -0
  155. package/dist/types/data-structures/bst.js +1 -0
  156. package/dist/types/data-structures/bst.js.map +1 -0
  157. package/dist/types/data-structures/directed-graph.js +1 -0
  158. package/dist/types/data-structures/directed-graph.js.map +1 -0
  159. package/dist/types/data-structures/doubly-linked-list.js +1 -0
  160. package/dist/types/data-structures/doubly-linked-list.js.map +1 -0
  161. package/dist/types/data-structures/heap.js +1 -0
  162. package/dist/types/data-structures/heap.js.map +1 -0
  163. package/dist/types/data-structures/index.js +1 -0
  164. package/dist/types/data-structures/index.js.map +1 -0
  165. package/dist/types/data-structures/map-graph.js +1 -0
  166. package/dist/types/data-structures/map-graph.js.map +1 -0
  167. package/dist/types/data-structures/navigator.js +1 -0
  168. package/dist/types/data-structures/navigator.js.map +1 -0
  169. package/dist/types/data-structures/priority-queue.js +1 -0
  170. package/dist/types/data-structures/priority-queue.js.map +1 -0
  171. package/dist/types/data-structures/rb-tree.js +1 -0
  172. package/dist/types/data-structures/rb-tree.js.map +1 -0
  173. package/dist/types/data-structures/segment-tree.js +1 -0
  174. package/dist/types/data-structures/segment-tree.js.map +1 -0
  175. package/dist/types/data-structures/singly-linked-list.js +1 -0
  176. package/dist/types/data-structures/singly-linked-list.js.map +1 -0
  177. package/dist/types/data-structures/tree-multiset.js +1 -0
  178. package/dist/types/data-structures/tree-multiset.js.map +1 -0
  179. package/dist/types/helpers.js +1 -0
  180. package/dist/types/helpers.js.map +1 -0
  181. package/dist/types/index.js +1 -0
  182. package/dist/types/index.js.map +1 -0
  183. package/dist/types/utils/index.js +1 -0
  184. package/dist/types/utils/index.js.map +1 -0
  185. package/dist/types/utils/utils.js +1 -0
  186. package/dist/types/utils/utils.js.map +1 -0
  187. package/dist/types/utils/validate-type.js +1 -0
  188. package/dist/types/utils/validate-type.js.map +1 -0
  189. package/dist/utils/index.js +1 -0
  190. package/dist/utils/index.js.map +1 -0
  191. package/dist/utils/utils.js +108 -22
  192. package/dist/utils/utils.js.map +1 -0
  193. package/docs/.nojekyll +1 -0
  194. package/docs/assets/highlight.css +127 -0
  195. package/docs/assets/main.js +58 -0
  196. package/docs/assets/search.js +1 -0
  197. package/docs/assets/style.css +1367 -0
  198. package/docs/classes/AVLTree.html +2259 -0
  199. package/docs/classes/AVLTreeNode.html +399 -0
  200. package/docs/classes/AaTree.html +202 -0
  201. package/docs/classes/AbstractBinaryTree.html +1913 -0
  202. package/docs/classes/AbstractBinaryTreeNode.html +441 -0
  203. package/docs/classes/AbstractEdge.html +345 -0
  204. package/docs/classes/AbstractGraph.html +1105 -0
  205. package/docs/classes/AbstractVertex.html +299 -0
  206. package/docs/classes/ArrayDeque.html +469 -0
  207. package/docs/classes/BST.html +2103 -0
  208. package/docs/classes/BSTNode.html +400 -0
  209. package/docs/classes/BTree.html +202 -0
  210. package/docs/classes/BinaryIndexedTree.html +371 -0
  211. package/docs/classes/BinaryTree.html +1944 -0
  212. package/docs/classes/BinaryTreeNode.html +399 -0
  213. package/docs/classes/Character.html +250 -0
  214. package/docs/classes/CoordinateMap.html +513 -0
  215. package/docs/classes/CoordinateSet.html +474 -0
  216. package/docs/classes/Deque.html +1005 -0
  217. package/docs/classes/DirectedEdge.html +404 -0
  218. package/docs/classes/DirectedGraph.html +1530 -0
  219. package/docs/classes/DirectedVertex.html +286 -0
  220. package/docs/classes/DoublyLinkedList.html +998 -0
  221. package/docs/classes/DoublyLinkedListNode.html +327 -0
  222. package/docs/classes/HashTable.html +202 -0
  223. package/docs/classes/Heap.html +647 -0
  224. package/docs/classes/HeapItem.html +296 -0
  225. package/docs/classes/LinkedListQueue.html +884 -0
  226. package/docs/classes/MapEdge.html +391 -0
  227. package/docs/classes/MapGraph.html +1583 -0
  228. package/docs/classes/MapVertex.html +356 -0
  229. package/docs/classes/Matrix2D.html +532 -0
  230. package/docs/classes/MatrixNTI2D.html +270 -0
  231. package/docs/classes/MaxHeap.html +671 -0
  232. package/docs/classes/MaxPriorityQueue.html +866 -0
  233. package/docs/classes/MinHeap.html +672 -0
  234. package/docs/classes/MinPriorityQueue.html +868 -0
  235. package/docs/classes/Navigator.html +343 -0
  236. package/docs/classes/ObjectDeque.html +527 -0
  237. package/docs/classes/Pair.html +202 -0
  238. package/docs/classes/PriorityQueue.html +790 -0
  239. package/docs/classes/Queue.html +521 -0
  240. package/docs/classes/RBTree.html +2101 -0
  241. package/docs/classes/RBTreeNode.html +431 -0
  242. package/docs/classes/SegmentTree.html +464 -0
  243. package/docs/classes/SegmentTreeNode.html +387 -0
  244. package/docs/classes/SinglyLinkedList.html +830 -0
  245. package/docs/classes/SinglyLinkedListNode.html +300 -0
  246. package/docs/classes/SkipLinkedList.html +202 -0
  247. package/docs/classes/SplayTree.html +202 -0
  248. package/docs/classes/Stack.html +398 -0
  249. package/docs/classes/TreeMap.html +202 -0
  250. package/docs/classes/TreeMultiset.html +2587 -0
  251. package/docs/classes/TreeMultisetNode.html +447 -0
  252. package/docs/classes/TreeNode.html +344 -0
  253. package/docs/classes/TreeSet.html +202 -0
  254. package/docs/classes/Trie.html +402 -0
  255. package/docs/classes/TrieNode.html +310 -0
  256. package/docs/classes/TwoThreeTree.html +202 -0
  257. package/docs/classes/UndirectedEdge.html +374 -0
  258. package/docs/classes/UndirectedGraph.html +1285 -0
  259. package/docs/classes/UndirectedVertex.html +284 -0
  260. package/docs/classes/Vector2D.html +835 -0
  261. package/docs/enums/CP.html +211 -0
  262. package/docs/enums/FamilyPosition.html +239 -0
  263. package/docs/enums/LoopType.html +212 -0
  264. package/docs/enums/RBColor.html +204 -0
  265. package/docs/enums/TopologicalProperty.html +211 -0
  266. package/docs/functions/arrayRemove.html +208 -0
  267. package/docs/functions/isThunk.html +186 -0
  268. package/docs/functions/toThunk.html +186 -0
  269. package/docs/functions/trampoline.html +186 -0
  270. package/docs/functions/trampolineAsync.html +186 -0
  271. package/docs/functions/uuidV4.html +181 -0
  272. package/docs/index.html +693 -0
  273. package/docs/interfaces/IAVLTree.html +1245 -0
  274. package/docs/interfaces/IAbstractBinaryTree.html +1101 -0
  275. package/docs/interfaces/IAbstractBinaryTreeNode.html +335 -0
  276. package/docs/interfaces/IAbstractGraph.html +433 -0
  277. package/docs/interfaces/IBST.html +1245 -0
  278. package/docs/interfaces/IDirectedGraph.html +570 -0
  279. package/docs/interfaces/IRBTree.html +1247 -0
  280. package/docs/interfaces/IUNDirectedGraph.html +463 -0
  281. package/docs/modules.html +328 -0
  282. package/docs/types/AVLTreeNodeNested.html +182 -0
  283. package/docs/types/AVLTreeOptions.html +180 -0
  284. package/docs/types/AbstractBinaryTreeNodeNested.html +182 -0
  285. package/docs/types/AbstractBinaryTreeNodeProperties.html +182 -0
  286. package/docs/types/AbstractBinaryTreeNodeProperty.html +182 -0
  287. package/docs/types/AbstractBinaryTreeOptions.html +182 -0
  288. package/docs/types/BSTComparator.html +192 -0
  289. package/docs/types/BSTNodeNested.html +182 -0
  290. package/docs/types/BSTOptions.html +182 -0
  291. package/docs/types/BinaryTreeDeletedResult.html +189 -0
  292. package/docs/types/BinaryTreeNodeId.html +177 -0
  293. package/docs/types/BinaryTreeNodeNested.html +182 -0
  294. package/docs/types/BinaryTreeNodePropertyName.html +177 -0
  295. package/docs/types/BinaryTreeOptions.html +180 -0
  296. package/docs/types/DFSOrderPattern.html +177 -0
  297. package/docs/types/DijkstraResult.html +199 -0
  298. package/docs/types/Direction.html +177 -0
  299. package/docs/types/DummyAny.html +190 -0
  300. package/docs/types/EdgeId.html +177 -0
  301. package/docs/types/HeapOptions.html +198 -0
  302. package/docs/types/IAVLTreeNode.html +184 -0
  303. package/docs/types/IBSTNode.html +184 -0
  304. package/docs/types/IBinaryTree.html +182 -0
  305. package/docs/types/IBinaryTreeNode.html +184 -0
  306. package/docs/types/IRBTreeNode.html +184 -0
  307. package/docs/types/ITreeMultiset.html +182 -0
  308. package/docs/types/ITreeMultisetNode.html +184 -0
  309. package/docs/types/KeyValueObject.html +182 -0
  310. package/docs/types/KeyValueObjectWithId.html +184 -0
  311. package/docs/types/MapGraphCoordinate.html +177 -0
  312. package/docs/types/NavigatorParams.html +211 -0
  313. package/docs/types/NodeOrPropertyName.html +177 -0
  314. package/docs/types/NonNumberNonObjectButDefined.html +177 -0
  315. package/docs/types/ObjectWithNonNumberId.html +184 -0
  316. package/docs/types/ObjectWithNumberId.html +184 -0
  317. package/docs/types/ObjectWithoutId.html +177 -0
  318. package/docs/types/PriorityQueueComparator.html +197 -0
  319. package/docs/types/PriorityQueueDFSOrderPattern.html +177 -0
  320. package/docs/types/PriorityQueueOptions.html +191 -0
  321. package/docs/types/RBTreeNodeNested.html +182 -0
  322. package/docs/types/RBTreeOptions.html +180 -0
  323. package/docs/types/RestrictValById.html +177 -0
  324. package/docs/types/SegmentTreeNodeVal.html +177 -0
  325. package/docs/types/SpecifyOptional.html +184 -0
  326. package/docs/types/Thunk.html +185 -0
  327. package/docs/types/ToThunkFn.html +185 -0
  328. package/docs/types/TopologicalStatus.html +177 -0
  329. package/docs/types/TreeMultisetNodeNested.html +182 -0
  330. package/docs/types/TreeMultisetOptions.html +180 -0
  331. package/docs/types/TrlAsyncFn.html +190 -0
  332. package/docs/types/TrlFn.html +190 -0
  333. package/docs/types/Turning.html +177 -0
  334. package/docs/types/VertexId.html +177 -0
  335. package/docs/variables/THUNK_SYMBOL.html +177 -0
  336. package/jest.config.js +5 -0
  337. package/lib/data-structures/binary-tree/aa-tree.js +2 -0
  338. package/{dist → lib}/data-structures/binary-tree/abstract-binary-tree.d.ts +25 -20
  339. package/lib/data-structures/binary-tree/abstract-binary-tree.js +1307 -0
  340. package/{dist → lib}/data-structures/binary-tree/avl-tree.d.ts +12 -12
  341. package/lib/data-structures/binary-tree/avl-tree.js +311 -0
  342. package/lib/data-structures/binary-tree/b-tree.js +2 -0
  343. package/lib/data-structures/binary-tree/binary-indexed-tree.js +69 -0
  344. package/lib/data-structures/binary-tree/binary-tree.js +35 -0
  345. package/{dist → lib}/data-structures/binary-tree/bst.d.ts +19 -8
  346. package/lib/data-structures/binary-tree/bst.js +551 -0
  347. package/lib/data-structures/binary-tree/index.js +12 -0
  348. package/{dist → lib}/data-structures/binary-tree/rb-tree.d.ts +0 -6
  349. package/lib/data-structures/binary-tree/rb-tree.js +22 -0
  350. package/lib/data-structures/binary-tree/segment-tree.js +210 -0
  351. package/lib/data-structures/binary-tree/splay-tree.js +2 -0
  352. package/{dist → lib}/data-structures/binary-tree/tree-multiset.d.ts +20 -23
  353. package/lib/data-structures/binary-tree/tree-multiset.js +673 -0
  354. package/lib/data-structures/binary-tree/two-three-tree.js +2 -0
  355. package/lib/data-structures/graph/abstract-graph.js +918 -0
  356. package/lib/data-structures/graph/directed-graph.js +416 -0
  357. package/lib/data-structures/graph/index.js +4 -0
  358. package/lib/data-structures/graph/map-graph.js +105 -0
  359. package/lib/data-structures/graph/undirected-graph.js +246 -0
  360. package/lib/data-structures/hash/coordinate-map.js +61 -0
  361. package/lib/data-structures/hash/coordinate-set.js +51 -0
  362. package/lib/data-structures/hash/hash-table.js +2 -0
  363. package/lib/data-structures/hash/index.js +6 -0
  364. package/lib/data-structures/hash/pair.js +2 -0
  365. package/lib/data-structures/hash/tree-map.js +2 -0
  366. package/lib/data-structures/hash/tree-set.js +2 -0
  367. package/lib/data-structures/heap/heap.js +152 -0
  368. package/lib/data-structures/heap/index.js +3 -0
  369. package/lib/data-structures/heap/max-heap.js +26 -0
  370. package/lib/data-structures/heap/min-heap.js +27 -0
  371. package/lib/data-structures/index.js +11 -0
  372. package/{dist → lib}/data-structures/linked-list/doubly-linked-list.d.ts +5 -5
  373. package/lib/data-structures/linked-list/doubly-linked-list.js +521 -0
  374. package/lib/data-structures/linked-list/index.js +3 -0
  375. package/{dist → lib}/data-structures/linked-list/singly-linked-list.d.ts +6 -5
  376. package/lib/data-structures/linked-list/singly-linked-list.js +443 -0
  377. package/lib/data-structures/linked-list/skip-linked-list.js +2 -0
  378. package/lib/data-structures/matrix/index.js +4 -0
  379. package/lib/data-structures/matrix/matrix.js +24 -0
  380. package/lib/data-structures/matrix/matrix2d.js +195 -0
  381. package/lib/data-structures/matrix/navigator.js +101 -0
  382. package/lib/data-structures/matrix/vector2d.js +287 -0
  383. package/lib/data-structures/priority-queue/index.js +3 -0
  384. package/lib/data-structures/priority-queue/max-priority-queue.js +39 -0
  385. package/lib/data-structures/priority-queue/min-priority-queue.js +40 -0
  386. package/lib/data-structures/priority-queue/priority-queue.js +317 -0
  387. package/{dist → lib}/data-structures/queue/deque.d.ts +45 -0
  388. package/lib/data-structures/queue/deque.js +270 -0
  389. package/lib/data-structures/queue/index.js +2 -0
  390. package/{dist → lib}/data-structures/queue/queue.d.ts +47 -13
  391. package/lib/data-structures/queue/queue.js +165 -0
  392. package/lib/data-structures/stack/index.js +1 -0
  393. package/lib/data-structures/stack/stack.js +87 -0
  394. package/lib/data-structures/tree/index.js +1 -0
  395. package/lib/data-structures/tree/tree.js +56 -0
  396. package/lib/data-structures/trie/index.js +1 -0
  397. package/lib/data-structures/trie/trie.js +205 -0
  398. package/lib/index.js +4 -0
  399. package/{dist → lib}/interfaces/avl-tree.d.ts +1 -9
  400. package/lib/interfaces/binary-tree.d.ts +4 -0
  401. package/{dist → lib}/interfaces/bst.d.ts +1 -2
  402. package/lib/interfaces/heap.js +1 -0
  403. package/lib/interfaces/index.js +15 -0
  404. package/lib/interfaces/navigator.d.ts +1 -0
  405. package/lib/interfaces/navigator.js +1 -0
  406. package/lib/interfaces/priority-queue.d.ts +1 -0
  407. package/lib/interfaces/priority-queue.js +1 -0
  408. package/{dist → lib}/interfaces/rb-tree.d.ts +1 -2
  409. package/lib/interfaces/rb-tree.js +1 -0
  410. package/lib/interfaces/segment-tree.d.ts +1 -0
  411. package/lib/interfaces/segment-tree.js +1 -0
  412. package/lib/interfaces/singly-linked-list.d.ts +1 -0
  413. package/lib/interfaces/singly-linked-list.js +1 -0
  414. package/lib/interfaces/tree-multiset.d.ts +5 -0
  415. package/lib/interfaces/tree-multiset.js +1 -0
  416. package/lib/interfaces/undirected-graph.js +1 -0
  417. package/{dist → lib}/types/data-structures/abstract-binary-tree.d.ts +1 -1
  418. package/lib/types/data-structures/abstract-binary-tree.js +22 -0
  419. package/lib/types/data-structures/abstract-graph.js +1 -0
  420. package/{dist → lib}/types/data-structures/avl-tree.d.ts +1 -1
  421. package/lib/types/data-structures/avl-tree.js +1 -0
  422. package/lib/types/data-structures/binary-tree.js +1 -0
  423. package/lib/types/data-structures/bst.js +6 -0
  424. package/lib/types/data-structures/directed-graph.js +6 -0
  425. package/lib/types/data-structures/doubly-linked-list.d.ts +1 -0
  426. package/lib/types/data-structures/doubly-linked-list.js +1 -0
  427. package/lib/types/data-structures/heap.js +1 -0
  428. package/lib/types/data-structures/index.js +15 -0
  429. package/lib/types/data-structures/map-graph.js +1 -0
  430. package/lib/types/data-structures/navigator.js +1 -0
  431. package/lib/types/data-structures/priority-queue.js +1 -0
  432. package/lib/types/data-structures/rb-tree.js +5 -0
  433. package/lib/types/data-structures/segment-tree.js +1 -0
  434. package/lib/types/data-structures/singly-linked-list.d.ts +1 -0
  435. package/lib/types/data-structures/singly-linked-list.js +1 -0
  436. package/lib/types/data-structures/tree-multiset.js +1 -0
  437. package/lib/types/helpers.d.ts +1 -0
  438. package/lib/types/helpers.js +1 -0
  439. package/lib/types/index.js +3 -0
  440. package/lib/types/utils/index.js +2 -0
  441. package/{dist → lib}/types/utils/utils.d.ts +1 -1
  442. package/lib/types/utils/utils.js +1 -0
  443. package/{dist → lib}/types/utils/validate-type.d.ts +1 -1
  444. package/lib/types/utils/validate-type.js +1 -0
  445. package/lib/utils/index.js +1 -0
  446. package/lib/utils/utils.js +57 -0
  447. package/package.json +147 -56
  448. package/rename_clear_files.sh +29 -0
  449. package/test/integration/avl-tree.test.ts +111 -0
  450. package/test/integration/bst.test.ts +371 -0
  451. package/test/integration/heap.test.js +19 -0
  452. package/test/integration/index.html +44 -0
  453. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +111 -0
  454. package/test/unit/data-structures/binary-tree/bst.test.ts +371 -0
  455. package/test/unit/data-structures/binary-tree/overall.test.ts +57 -0
  456. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +405 -0
  457. package/test/unit/data-structures/graph/abstract-graph.test.ts +5 -0
  458. package/test/unit/data-structures/graph/directed-graph.test.ts +517 -0
  459. package/test/unit/data-structures/graph/index.ts +2 -0
  460. package/test/unit/data-structures/graph/map-graph.test.ts +46 -0
  461. package/test/unit/data-structures/graph/overall.test.ts +50 -0
  462. package/test/unit/data-structures/graph/undirected-graph.test.ts +60 -0
  463. package/test/unit/data-structures/heap/heap.test.ts +56 -0
  464. package/test/unit/data-structures/heap/max-heap.test.ts +42 -0
  465. package/test/unit/data-structures/heap/min-heap.test.ts +81 -0
  466. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +365 -0
  467. package/test/unit/data-structures/linked-list/index.ts +4 -0
  468. package/test/unit/data-structures/linked-list/linked-list.test.ts +37 -0
  469. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +401 -0
  470. package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +13 -0
  471. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +106 -0
  472. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +105 -0
  473. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +27 -0
  474. package/test/unit/data-structures/queue/queue.test.ts +36 -0
  475. package/test/utils/index.ts +2 -0
  476. package/test/utils/magnitude.ts +21 -0
  477. package/test/utils/number.ts +3 -0
  478. package/tsconfig.build.json +33 -0
  479. package/tsconfig.json +38 -0
  480. package/umd/bundle.min.js +3 -0
  481. package/umd/bundle.min.js.map +1 -0
  482. package/webpack.config.js +28 -0
  483. package/dist/bundle.js +0 -2
  484. package/dist/interfaces/binary-tree.d.ts +0 -6
  485. package/dist/interfaces/tree-multiset.d.ts +0 -7
  486. /package/{dist → lib}/data-structures/binary-tree/aa-tree.d.ts +0 -0
  487. /package/{dist → lib}/data-structures/binary-tree/b-tree.d.ts +0 -0
  488. /package/{dist → lib}/data-structures/binary-tree/binary-indexed-tree.d.ts +0 -0
  489. /package/{dist → lib}/data-structures/binary-tree/binary-tree.d.ts +0 -0
  490. /package/{dist → lib}/data-structures/binary-tree/index.d.ts +0 -0
  491. /package/{dist → lib}/data-structures/binary-tree/segment-tree.d.ts +0 -0
  492. /package/{dist → lib}/data-structures/binary-tree/splay-tree.d.ts +0 -0
  493. /package/{dist → lib}/data-structures/binary-tree/two-three-tree.d.ts +0 -0
  494. /package/{dist → lib}/data-structures/graph/abstract-graph.d.ts +0 -0
  495. /package/{dist → lib}/data-structures/graph/directed-graph.d.ts +0 -0
  496. /package/{dist → lib}/data-structures/graph/index.d.ts +0 -0
  497. /package/{dist → lib}/data-structures/graph/map-graph.d.ts +0 -0
  498. /package/{dist → lib}/data-structures/graph/undirected-graph.d.ts +0 -0
  499. /package/{dist → lib}/data-structures/hash/coordinate-map.d.ts +0 -0
  500. /package/{dist → lib}/data-structures/hash/coordinate-set.d.ts +0 -0
  501. /package/{dist → lib}/data-structures/hash/hash-table.d.ts +0 -0
  502. /package/{dist → lib}/data-structures/hash/index.d.ts +0 -0
  503. /package/{dist → lib}/data-structures/hash/pair.d.ts +0 -0
  504. /package/{dist → lib}/data-structures/hash/tree-map.d.ts +0 -0
  505. /package/{dist → lib}/data-structures/hash/tree-set.d.ts +0 -0
  506. /package/{dist → lib}/data-structures/heap/heap.d.ts +0 -0
  507. /package/{dist → lib}/data-structures/heap/index.d.ts +0 -0
  508. /package/{dist → lib}/data-structures/heap/max-heap.d.ts +0 -0
  509. /package/{dist → lib}/data-structures/heap/min-heap.d.ts +0 -0
  510. /package/{dist → lib}/data-structures/index.d.ts +0 -0
  511. /package/{dist → lib}/data-structures/linked-list/index.d.ts +0 -0
  512. /package/{dist → lib}/data-structures/linked-list/skip-linked-list.d.ts +0 -0
  513. /package/{dist → lib}/data-structures/matrix/index.d.ts +0 -0
  514. /package/{dist → lib}/data-structures/matrix/matrix.d.ts +0 -0
  515. /package/{dist → lib}/data-structures/matrix/matrix2d.d.ts +0 -0
  516. /package/{dist → lib}/data-structures/matrix/navigator.d.ts +0 -0
  517. /package/{dist → lib}/data-structures/matrix/vector2d.d.ts +0 -0
  518. /package/{dist → lib}/data-structures/priority-queue/index.d.ts +0 -0
  519. /package/{dist → lib}/data-structures/priority-queue/max-priority-queue.d.ts +0 -0
  520. /package/{dist → lib}/data-structures/priority-queue/min-priority-queue.d.ts +0 -0
  521. /package/{dist → lib}/data-structures/priority-queue/priority-queue.d.ts +0 -0
  522. /package/{dist → lib}/data-structures/queue/index.d.ts +0 -0
  523. /package/{dist → lib}/data-structures/stack/index.d.ts +0 -0
  524. /package/{dist → lib}/data-structures/stack/stack.d.ts +0 -0
  525. /package/{dist → lib}/data-structures/tree/index.d.ts +0 -0
  526. /package/{dist → lib}/data-structures/tree/tree.d.ts +0 -0
  527. /package/{dist → lib}/data-structures/trie/index.d.ts +0 -0
  528. /package/{dist → lib}/data-structures/trie/trie.d.ts +0 -0
  529. /package/{dist → lib}/index.d.ts +0 -0
  530. /package/{dist → lib}/interfaces/abstract-binary-tree.d.ts +0 -0
  531. /package/{dist/interfaces/doubly-linked-list.d.ts → lib/interfaces/abstract-binary-tree.js} +0 -0
  532. /package/{dist → lib}/interfaces/abstract-graph.d.ts +0 -0
  533. /package/{dist/interfaces/heap.d.ts → lib/interfaces/abstract-graph.js} +0 -0
  534. /package/{dist/interfaces/navigator.d.ts → lib/interfaces/avl-tree.js} +0 -0
  535. /package/{dist/interfaces/priority-queue.d.ts → lib/interfaces/binary-tree.js} +0 -0
  536. /package/{dist/interfaces/segment-tree.d.ts → lib/interfaces/bst.js} +0 -0
  537. /package/{dist → lib}/interfaces/directed-graph.d.ts +0 -0
  538. /package/{dist/interfaces/singly-linked-list.d.ts → lib/interfaces/directed-graph.js} +0 -0
  539. /package/{dist/types/data-structures → lib/interfaces}/doubly-linked-list.d.ts +0 -0
  540. /package/{dist/types/data-structures/singly-linked-list.d.ts → lib/interfaces/doubly-linked-list.js} +0 -0
  541. /package/{dist/types/helpers.d.ts → lib/interfaces/heap.d.ts} +0 -0
  542. /package/{dist → lib}/interfaces/index.d.ts +0 -0
  543. /package/{dist → lib}/interfaces/undirected-graph.d.ts +0 -0
  544. /package/{dist → lib}/types/data-structures/abstract-graph.d.ts +0 -0
  545. /package/{dist → lib}/types/data-structures/binary-tree.d.ts +0 -0
  546. /package/{dist → lib}/types/data-structures/bst.d.ts +0 -0
  547. /package/{dist → lib}/types/data-structures/directed-graph.d.ts +0 -0
  548. /package/{dist → lib}/types/data-structures/heap.d.ts +0 -0
  549. /package/{dist → lib}/types/data-structures/index.d.ts +0 -0
  550. /package/{dist → lib}/types/data-structures/map-graph.d.ts +0 -0
  551. /package/{dist → lib}/types/data-structures/navigator.d.ts +0 -0
  552. /package/{dist → lib}/types/data-structures/priority-queue.d.ts +0 -0
  553. /package/{dist → lib}/types/data-structures/rb-tree.d.ts +0 -0
  554. /package/{dist → lib}/types/data-structures/segment-tree.d.ts +0 -0
  555. /package/{dist → lib}/types/data-structures/tree-multiset.d.ts +0 -0
  556. /package/{dist → lib}/types/index.d.ts +0 -0
  557. /package/{dist → lib}/types/utils/index.d.ts +0 -0
  558. /package/{dist → lib}/utils/index.d.ts +0 -0
  559. /package/{dist → lib}/utils/utils.d.ts +0 -0
  560. /package/{dist/bundle.js.LICENSE.txt → umd/bundle.min.js.LICENSE.txt} +0 -0
@@ -1,103 +1,129 @@
1
1
  "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ var __read = (this && this.__read) || function (o, n) {
29
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
30
+ if (!m) return o;
31
+ var i = m.call(o), r, ar = [], e;
32
+ try {
33
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
34
+ }
35
+ catch (error) { e = { error: error }; }
36
+ finally {
37
+ try {
38
+ if (r && !r.done && (m = i["return"])) m.call(i);
39
+ }
40
+ finally { if (e) throw e.error; }
41
+ }
42
+ return ar;
43
+ };
2
44
  Object.defineProperty(exports, "__esModule", { value: true });
3
45
  exports.BST = exports.BSTNode = void 0;
4
- const types_1 = require("../../types");
5
- const binary_tree_1 = require("./binary-tree");
6
- class BSTNode extends binary_tree_1.BinaryTreeNode {
7
- constructor(id, val) {
8
- super(id, val);
46
+ var types_1 = require("../../types");
47
+ var binary_tree_1 = require("./binary-tree");
48
+ var BSTNode = (function (_super) {
49
+ __extends(BSTNode, _super);
50
+ function BSTNode(id, val) {
51
+ return _super.call(this, id, val) || this;
9
52
  }
10
- }
53
+ return BSTNode;
54
+ }(binary_tree_1.BinaryTreeNode));
11
55
  exports.BSTNode = BSTNode;
12
- class BST extends binary_tree_1.BinaryTree {
13
- /**
14
- * The constructor function initializes a binary search tree object with an optional comparator function.
15
- * @param {BSTOptions} [options] - An optional object that contains configuration options for the binary search tree.
16
- */
17
- constructor(options) {
18
- super(options);
19
- this._comparator = (a, b) => a - b;
56
+ var BST = (function (_super) {
57
+ __extends(BST, _super);
58
+ function BST(options) {
59
+ var _this = _super.call(this, options) || this;
60
+ _this._comparator = function (a, b) { return a - b; };
20
61
  if (options !== undefined) {
21
- const { comparator } = options;
62
+ var comparator = options.comparator;
22
63
  if (comparator !== undefined) {
23
- this._comparator = comparator;
64
+ _this._comparator = comparator;
24
65
  }
25
66
  }
67
+ return _this;
26
68
  }
27
- /**
28
- * The function creates a new binary search tree node with the given id and value.
29
- * @param {BinaryTreeNodeId} id - The `id` parameter is the identifier for the binary tree node. It is used to uniquely
30
- * identify each node in the binary tree.
31
- * @param [val] - The `val` parameter is an optional value that can be assigned to the node. It represents the value
32
- * that will be stored in the node.
33
- * @returns a new instance of the BSTNode class with the specified id and value.
34
- */
35
- createNode(id, val) {
69
+ BST.prototype.createNode = function (id, val) {
36
70
  return new BSTNode(id, val);
37
- }
38
- /**
39
- * The `add` function adds a new node to a binary tree, ensuring that duplicates are not accepted.
40
- * @param {BinaryTreeNodeId} id - The `id` parameter is the identifier of the binary tree node that we want to add. It
41
- * is of type `BinaryTreeNodeId`.
42
- * @param [val] - The `val` parameter is an optional value that can be assigned to the node being added. It represents
43
- * the value associated with the node.
44
- * @returns The function `add` returns the inserted node (`inserted`) if it was successfully added to the binary tree.
45
- * If the node was not added (e.g., due to a duplicate ID), it returns `null` or `undefined`.
46
- */
47
- add(id, val) {
48
- // TODO support node as a param
49
- let inserted = null;
50
- const newNode = this.createNode(id, val);
71
+ };
72
+ BST.prototype.add = function (idOrNode, val) {
73
+ var inserted = null;
74
+ var newNode = null;
75
+ if (idOrNode instanceof BSTNode) {
76
+ newNode = idOrNode;
77
+ }
78
+ else if (typeof idOrNode === 'number') {
79
+ newNode = this.createNode(idOrNode, val);
80
+ }
81
+ else if (idOrNode === null) {
82
+ newNode = null;
83
+ }
51
84
  if (this.root === null) {
52
85
  this._setRoot(newNode);
53
86
  this._setSize(this.size + 1);
54
- inserted = (this.root);
87
+ inserted = this.root;
55
88
  }
56
89
  else {
57
- let cur = this.root;
58
- let traversing = true;
90
+ var cur = this.root;
91
+ var traversing = true;
59
92
  while (traversing) {
60
93
  if (cur !== null && newNode !== null) {
61
- if (this._compare(cur.id, id) === types_1.CP.eq) {
94
+ if (this._compare(cur.id, newNode.id) === types_1.CP.eq) {
62
95
  if (newNode) {
63
96
  cur.val = newNode.val;
64
97
  }
65
- //Duplicates are not accepted.
66
98
  traversing = false;
67
99
  inserted = cur;
68
100
  }
69
- else if (this._compare(cur.id, id) === types_1.CP.gt) {
70
- // Traverse left of the node
101
+ else if (this._compare(cur.id, newNode.id) === types_1.CP.gt) {
71
102
  if (cur.left === undefined) {
72
103
  if (newNode) {
73
104
  newNode.parent = cur;
74
105
  }
75
- //Add to the left of the current node
76
106
  cur.left = newNode;
77
107
  this._setSize(this.size + 1);
78
108
  traversing = false;
79
109
  inserted = cur.left;
80
110
  }
81
111
  else {
82
- //Traverse the left of the current node
83
112
  if (cur.left)
84
113
  cur = cur.left;
85
114
  }
86
115
  }
87
- else if (this._compare(cur.id, id) === types_1.CP.lt) {
88
- // Traverse right of the node
116
+ else if (this._compare(cur.id, newNode.id) === types_1.CP.lt) {
89
117
  if (cur.right === undefined) {
90
118
  if (newNode) {
91
119
  newNode.parent = cur;
92
120
  }
93
- //Add to the right of the current node
94
121
  cur.right = newNode;
95
122
  this._setSize(this.size + 1);
96
123
  traversing = false;
97
- inserted = (cur.right);
124
+ inserted = cur.right;
98
125
  }
99
126
  else {
100
- //Traverse the left of the current node
101
127
  if (cur.right)
102
128
  cur = cur.right;
103
129
  }
@@ -109,28 +135,113 @@ class BST extends binary_tree_1.BinaryTree {
109
135
  }
110
136
  }
111
137
  return inserted;
112
- }
113
- /**
114
- * The function returns the first node in a binary tree that matches the given property name and value.
115
- * @param {BinaryTreeNodeId | N} nodeProperty - The `nodeProperty` parameter can be either a `BinaryTreeNodeId` or a
116
- * generic type `N`. It represents the property of the binary tree node that you want to search for.
117
- * @param {BinaryTreeNodePropertyName} [propertyName] - The `propertyName` parameter is an optional parameter that
118
- * specifies the property name to use for searching the binary tree nodes. If not provided, it defaults to `'id'`.
119
- * @returns The method is returning either a BinaryTreeNodeId or N (generic type) or null.
120
- */
121
- get(nodeProperty, propertyName) {
138
+ };
139
+ BST.prototype.addMany = function (idsOrNodes, data, isBalanceAdd) {
140
+ var _this = this;
141
+ if (isBalanceAdd === void 0) { isBalanceAdd = false; }
142
+ function hasNoNull(arr) {
143
+ return arr.indexOf(null) === -1;
144
+ }
145
+ if (!isBalanceAdd || !hasNoNull(idsOrNodes)) {
146
+ return _super.prototype.addMany.call(this, idsOrNodes, data);
147
+ }
148
+ var inserted = [];
149
+ var combinedArr = idsOrNodes.map(function (value, index) { return [value, data === null || data === void 0 ? void 0 : data[index]]; });
150
+ var sorted = [];
151
+ function isNodeOrNullTuple(arr) {
152
+ var e_1, _a;
153
+ try {
154
+ for (var arr_1 = __values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {
155
+ var _b = __read(arr_1_1.value, 1), idOrNode = _b[0];
156
+ if (idOrNode instanceof BSTNode)
157
+ return true;
158
+ }
159
+ }
160
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
161
+ finally {
162
+ try {
163
+ if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);
164
+ }
165
+ finally { if (e_1) throw e_1.error; }
166
+ }
167
+ return false;
168
+ }
169
+ function isBinaryTreeIdOrNullTuple(arr) {
170
+ var e_2, _a;
171
+ try {
172
+ for (var arr_2 = __values(arr), arr_2_1 = arr_2.next(); !arr_2_1.done; arr_2_1 = arr_2.next()) {
173
+ var _b = __read(arr_2_1.value, 1), idOrNode = _b[0];
174
+ if (typeof idOrNode === 'number')
175
+ return true;
176
+ }
177
+ }
178
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
179
+ finally {
180
+ try {
181
+ if (arr_2_1 && !arr_2_1.done && (_a = arr_2.return)) _a.call(arr_2);
182
+ }
183
+ finally { if (e_2) throw e_2.error; }
184
+ }
185
+ return false;
186
+ }
187
+ var sortedIdsOrNodes = [], sortedData = [];
188
+ if (isNodeOrNullTuple(combinedArr)) {
189
+ sorted = combinedArr.sort(function (a, b) { return a[0].id - b[0].id; });
190
+ }
191
+ else if (isBinaryTreeIdOrNullTuple(combinedArr)) {
192
+ sorted = combinedArr.sort(function (a, b) { return a[0] - b[0]; });
193
+ }
194
+ else {
195
+ throw new Error('Invalid input idsOrNodes');
196
+ }
197
+ sortedIdsOrNodes = sorted.map(function (_a) {
198
+ var _b = __read(_a, 1), idOrNode = _b[0];
199
+ return idOrNode;
200
+ });
201
+ sortedData = sorted.map(function (_a) {
202
+ var _b = __read(_a, 2), val = _b[1];
203
+ return val;
204
+ });
205
+ var recursive = function (arr, data) {
206
+ if (arr.length === 0)
207
+ return;
208
+ var mid = Math.floor((arr.length - 1) / 2);
209
+ var newNode = _this.add(arr[mid], data === null || data === void 0 ? void 0 : data[mid]);
210
+ inserted.push(newNode);
211
+ recursive(arr.slice(0, mid), data === null || data === void 0 ? void 0 : data.slice(0, mid));
212
+ recursive(arr.slice(mid + 1), data === null || data === void 0 ? void 0 : data.slice(mid + 1));
213
+ };
214
+ var iterative = function () {
215
+ var n = sorted.length;
216
+ var stack = [[0, n - 1]];
217
+ while (stack.length > 0) {
218
+ var popped = stack.pop();
219
+ if (popped) {
220
+ var _a = __read(popped, 2), l = _a[0], r = _a[1];
221
+ if (l <= r) {
222
+ var m = l + Math.floor((r - l) / 2);
223
+ var newNode = _this.add(sortedIdsOrNodes[m], sortedData === null || sortedData === void 0 ? void 0 : sortedData[m]);
224
+ inserted.push(newNode);
225
+ stack.push([m + 1, r]);
226
+ stack.push([l, m - 1]);
227
+ }
228
+ }
229
+ }
230
+ };
231
+ if (this.loopType === types_1.LoopType.RECURSIVE) {
232
+ recursive(sortedIdsOrNodes, sortedData);
233
+ }
234
+ else {
235
+ iterative();
236
+ }
237
+ return inserted;
238
+ };
239
+ BST.prototype.get = function (nodeProperty, propertyName) {
122
240
  var _a;
123
241
  propertyName = propertyName !== null && propertyName !== void 0 ? propertyName : 'id';
124
242
  return (_a = this.getNodes(nodeProperty, propertyName, true)[0]) !== null && _a !== void 0 ? _a : null;
125
- }
126
- /**
127
- * The function returns the id of the rightmost node if the comparison between two values is less than, the id of the
128
- * leftmost node if the comparison is greater than, and the id of the rightmost node otherwise.
129
- * @returns The method `lastKey()` returns the id of the rightmost node in the binary tree if the comparison between
130
- * the values at index 0 and 1 is less than, otherwise it returns the id of the leftmost node. If the comparison is
131
- * equal, it returns the id of the rightmost node. If there are no nodes in the tree, it returns 0.
132
- */
133
- lastKey() {
243
+ };
244
+ BST.prototype.lastKey = function () {
134
245
  var _a, _b, _c, _d, _e, _f;
135
246
  if (this._compare(0, 1) === types_1.CP.lt)
136
247
  return (_b = (_a = this.getRightMost()) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : 0;
@@ -138,46 +249,36 @@ class BST extends binary_tree_1.BinaryTree {
138
249
  return (_d = (_c = this.getLeftMost()) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : 0;
139
250
  else
140
251
  return (_f = (_e = this.getRightMost()) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : 0;
141
- }
142
- /**
143
- * The function `getNodes` returns an array of nodes in a binary tree that match a given property value.
144
- * @param {BinaryTreeNodeId | N} nodeProperty - The `nodeProperty` parameter can be either a `BinaryTreeNodeId` or an
145
- * `N` type. It represents the property of the binary tree node that you want to compare with.
146
- * @param {BinaryTreeNodePropertyName} [propertyName] - The `propertyName` parameter is an optional parameter that
147
- * specifies the property name to use for comparison. If not provided, it defaults to `'id'`.
148
- * @param {boolean} [onlyOne] - The `onlyOne` parameter is an optional boolean parameter that determines whether to
149
- * return only one node that matches the given `nodeProperty` or all nodes that match the `nodeProperty`. If `onlyOne`
150
- * is set to `true`, the function will return an array with only one node (if
151
- * @returns an array of nodes (type N).
152
- */
153
- getNodes(nodeProperty, propertyName, onlyOne) {
154
- propertyName = propertyName !== null && propertyName !== void 0 ? propertyName : 'id';
252
+ };
253
+ BST.prototype.getNodes = function (nodeProperty, propertyName, onlyOne) {
254
+ var _this = this;
255
+ if (propertyName === void 0) { propertyName = 'id'; }
155
256
  if (!this.root)
156
257
  return [];
157
- const result = [];
258
+ var result = [];
158
259
  if (this.loopType === types_1.LoopType.RECURSIVE) {
159
- const _traverse = (cur) => {
160
- if (this._pushByPropertyNameStopOrNot(cur, result, nodeProperty, propertyName, onlyOne))
260
+ var _traverse_1 = function (cur) {
261
+ if (_this._pushByPropertyNameStopOrNot(cur, result, nodeProperty, propertyName, onlyOne))
161
262
  return;
162
263
  if (!cur.left && !cur.right)
163
264
  return;
164
265
  if (propertyName === 'id') {
165
- if (this._compare(cur.id, nodeProperty) === types_1.CP.gt)
166
- cur.left && _traverse(cur.left);
167
- if (this._compare(cur.id, nodeProperty) === types_1.CP.lt)
168
- cur.right && _traverse(cur.right);
266
+ if (_this._compare(cur.id, nodeProperty) === types_1.CP.gt)
267
+ cur.left && _traverse_1(cur.left);
268
+ if (_this._compare(cur.id, nodeProperty) === types_1.CP.lt)
269
+ cur.right && _traverse_1(cur.right);
169
270
  }
170
271
  else {
171
- cur.left && _traverse(cur.left);
172
- cur.right && _traverse(cur.right);
272
+ cur.left && _traverse_1(cur.left);
273
+ cur.right && _traverse_1(cur.right);
173
274
  }
174
275
  };
175
- _traverse(this.root);
276
+ _traverse_1(this.root);
176
277
  }
177
278
  else {
178
- const queue = [this.root];
279
+ var queue = [this.root];
179
280
  while (queue.length > 0) {
180
- const cur = queue.shift();
281
+ var cur = queue.shift();
181
282
  if (cur) {
182
283
  if (this._pushByPropertyNameStopOrNot(cur, result, nodeProperty, propertyName, onlyOne))
183
284
  return result;
@@ -195,18 +296,9 @@ class BST extends binary_tree_1.BinaryTree {
195
296
  }
196
297
  }
197
298
  return result;
198
- }
199
- // --- start additional functions
200
- /**
201
- * The `lesserSum` function calculates the sum of property values in a binary tree for nodes that have a property value
202
- * less than a given node.
203
- * @param {N | BinaryTreeNodeId | null} beginNode - The `beginNode` parameter can be one of the following:
204
- * @param {BinaryTreeNodePropertyName} [propertyName] - The `propertyName` parameter is an optional parameter that
205
- * specifies the property name to use for calculating the sum. If not provided, it defaults to `'id'`.
206
- * @returns The function `lesserSum` returns a number, which represents the sum of the values of the nodes in the
207
- * binary tree that have a lesser value than the specified `beginNode` based on the `propertyName`.
208
- */
209
- lesserSum(beginNode, propertyName) {
299
+ };
300
+ BST.prototype.lesserSum = function (beginNode, propertyName) {
301
+ var _this = this;
210
302
  propertyName = propertyName !== null && propertyName !== void 0 ? propertyName : 'id';
211
303
  if (typeof beginNode === 'number')
212
304
  beginNode = this.get(beginNode, 'id');
@@ -214,9 +306,9 @@ class BST extends binary_tree_1.BinaryTree {
214
306
  return 0;
215
307
  if (!this.root)
216
308
  return 0;
217
- const id = beginNode.id;
218
- const getSumByPropertyName = (cur) => {
219
- let needSum;
309
+ var id = beginNode.id;
310
+ var getSumByPropertyName = function (cur) {
311
+ var needSum;
220
312
  switch (propertyName) {
221
313
  case 'id':
222
314
  needSum = cur.id;
@@ -227,45 +319,45 @@ class BST extends binary_tree_1.BinaryTree {
227
319
  }
228
320
  return needSum;
229
321
  };
230
- let sum = 0;
322
+ var sum = 0;
231
323
  if (this.loopType === types_1.LoopType.RECURSIVE) {
232
- const _traverse = (cur) => {
233
- const compared = this._compare(cur.id, id);
324
+ var _traverse_2 = function (cur) {
325
+ var compared = _this._compare(cur.id, id);
234
326
  if (compared === types_1.CP.eq) {
235
327
  if (cur.right)
236
- sum += this.subTreeSum(cur.right, propertyName);
328
+ sum += _this.subTreeSum(cur.right, propertyName);
237
329
  return;
238
330
  }
239
331
  else if (compared === types_1.CP.lt) {
240
332
  if (cur.left)
241
- sum += this.subTreeSum(cur.left, propertyName);
333
+ sum += _this.subTreeSum(cur.left, propertyName);
242
334
  sum += getSumByPropertyName(cur);
243
335
  if (cur.right)
244
- _traverse(cur.right);
336
+ _traverse_2(cur.right);
245
337
  else
246
338
  return;
247
339
  }
248
340
  else {
249
341
  if (cur.left)
250
- _traverse(cur.left);
342
+ _traverse_2(cur.left);
251
343
  else
252
344
  return;
253
345
  }
254
346
  };
255
- _traverse(this.root);
347
+ _traverse_2(this.root);
256
348
  }
257
349
  else {
258
- const queue = [this.root];
350
+ var queue = [this.root];
259
351
  while (queue.length > 0) {
260
- const cur = queue.shift();
352
+ var cur = queue.shift();
261
353
  if (cur) {
262
- const compared = this._compare(cur.id, id);
354
+ var compared = this._compare(cur.id, id);
263
355
  if (compared === types_1.CP.eq) {
264
356
  if (cur.right)
265
357
  sum += this.subTreeSum(cur.right, propertyName);
266
358
  return sum;
267
359
  }
268
- else if (compared === types_1.CP.lt) { // todo maybe a bug
360
+ else if (compared === types_1.CP.lt) {
269
361
  if (cur.left)
270
362
  sum += this.subTreeSum(cur.left, propertyName);
271
363
  sum += getSumByPropertyName(cur);
@@ -284,29 +376,18 @@ class BST extends binary_tree_1.BinaryTree {
284
376
  }
285
377
  }
286
378
  return sum;
287
- }
288
- /**
289
- * The `allGreaterNodesAdd` function adds a delta value to the specified property of all nodes in a binary tree that
290
- * have a greater value than a given node.
291
- * @param {N | BinaryTreeNodeId | null} node - The `node` parameter can be either of type `N` (a generic type),
292
- * `BinaryTreeNodeId`, or `null`. It represents the node in the binary tree to which the delta value will be added.
293
- * @param {number} delta - The `delta` parameter is a number that represents the amount by which the property value of
294
- * each greater node should be increased.
295
- * @param {BinaryTreeNodePropertyName} [propertyName] - The `propertyName` parameter is an optional parameter that
296
- * specifies the property name of the nodes in the binary tree that you want to update. If not provided, it defaults to
297
- * 'id'.
298
- * @returns a boolean value.
299
- */
300
- allGreaterNodesAdd(node, delta, propertyName) {
379
+ };
380
+ BST.prototype.allGreaterNodesAdd = function (node, delta, propertyName) {
381
+ var _this = this;
301
382
  propertyName = propertyName !== null && propertyName !== void 0 ? propertyName : 'id';
302
383
  if (typeof node === 'number')
303
384
  node = this.get(node, 'id');
304
385
  if (!node)
305
386
  return false;
306
- const id = node.id;
387
+ var id = node.id;
307
388
  if (!this.root)
308
389
  return false;
309
- const _sumByPropertyName = (cur) => {
390
+ var _sumByPropertyName = function (cur) {
310
391
  switch (propertyName) {
311
392
  case 'id':
312
393
  cur.id += delta;
@@ -317,26 +398,26 @@ class BST extends binary_tree_1.BinaryTree {
317
398
  }
318
399
  };
319
400
  if (this.loopType === types_1.LoopType.RECURSIVE) {
320
- const _traverse = (cur) => {
321
- const compared = this._compare(cur.id, id);
401
+ var _traverse_3 = function (cur) {
402
+ var compared = _this._compare(cur.id, id);
322
403
  if (compared === types_1.CP.gt)
323
404
  _sumByPropertyName(cur);
324
405
  if (!cur.left && !cur.right)
325
406
  return;
326
- if (cur.left && this._compare(cur.left.id, id) === types_1.CP.gt)
327
- _traverse(cur.left);
328
- if (cur.right && this._compare(cur.right.id, id) === types_1.CP.gt)
329
- _traverse(cur.right);
407
+ if (cur.left && _this._compare(cur.left.id, id) === types_1.CP.gt)
408
+ _traverse_3(cur.left);
409
+ if (cur.right && _this._compare(cur.right.id, id) === types_1.CP.gt)
410
+ _traverse_3(cur.right);
330
411
  };
331
- _traverse(this.root);
412
+ _traverse_3(this.root);
332
413
  return true;
333
414
  }
334
415
  else {
335
- const queue = [this.root];
416
+ var queue = [this.root];
336
417
  while (queue.length > 0) {
337
- const cur = queue.shift();
418
+ var cur = queue.shift();
338
419
  if (cur) {
339
- const compared = this._compare(cur.id, id);
420
+ var compared = this._compare(cur.id, id);
340
421
  if (compared === types_1.CP.gt)
341
422
  _sumByPropertyName(cur);
342
423
  if (cur.left && this._compare(cur.left.id, id) === types_1.CP.gt)
@@ -347,48 +428,35 @@ class BST extends binary_tree_1.BinaryTree {
347
428
  }
348
429
  return true;
349
430
  }
350
- }
351
- /**
352
- * Balancing Adjustment:
353
- * Perfectly Balanced Binary Tree: Since the balance of a perfectly balanced binary tree is already fixed, no additional balancing adjustment is needed. Any insertion or deletion operation will disrupt the perfect balance, often requiring a complete reconstruction of the tree.
354
- * AVL Tree: After insertion or deletion operations, an AVL tree performs rotation adjustments based on the balance factor of nodes to restore the tree's balance. These rotations can be left rotations, right rotations, left-right rotations, or right-left rotations, performed as needed.
355
- *
356
- * Use Cases and Efficiency:
357
- * Perfectly Balanced Binary Tree: Perfectly balanced binary trees are typically used in specific scenarios such as complete binary heaps in heap sort or certain types of Huffman trees. However, they are not suitable for dynamic operations requiring frequent insertions and deletions, as these operations often necessitate full tree reconstruction.
358
- * AVL Tree: AVL trees are well-suited for scenarios involving frequent searching, insertion, and deletion operations. Through rotation adjustments, AVL trees maintain their balance, ensuring average and worst-case time complexity of O(log n).
359
- */
360
- /**
361
- * The `perfectlyBalance` function takes a binary tree, performs a depth-first search to sort the nodes, and then
362
- * constructs a balanced binary search tree using either a recursive or iterative approach.
363
- * @returns The function `perfectlyBalance()` returns a boolean value.
364
- */
365
- perfectlyBalance() {
366
- const sorted = this.DFS('in', 'node'), n = sorted.length;
431
+ };
432
+ BST.prototype.perfectlyBalance = function () {
433
+ var _this = this;
434
+ var sorted = this.DFS('in', 'node'), n = sorted.length;
367
435
  this.clear();
368
436
  if (sorted.length < 1)
369
437
  return false;
370
438
  if (this.loopType === types_1.LoopType.RECURSIVE) {
371
- const buildBalanceBST = (l, r) => {
439
+ var buildBalanceBST_1 = function (l, r) {
372
440
  if (l > r)
373
441
  return;
374
- const m = l + Math.floor((r - l) / 2);
375
- const midNode = sorted[m];
376
- this.add(midNode.id, midNode.val);
377
- buildBalanceBST(l, m - 1);
378
- buildBalanceBST(m + 1, r);
442
+ var m = l + Math.floor((r - l) / 2);
443
+ var midNode = sorted[m];
444
+ _this.add(midNode.id, midNode.val);
445
+ buildBalanceBST_1(l, m - 1);
446
+ buildBalanceBST_1(m + 1, r);
379
447
  };
380
- buildBalanceBST(0, n - 1);
448
+ buildBalanceBST_1(0, n - 1);
381
449
  return true;
382
450
  }
383
451
  else {
384
- const stack = [[0, n - 1]];
452
+ var stack = [[0, n - 1]];
385
453
  while (stack.length > 0) {
386
- const popped = stack.pop();
454
+ var popped = stack.pop();
387
455
  if (popped) {
388
- const [l, r] = popped;
456
+ var _a = __read(popped, 2), l = _a[0], r = _a[1];
389
457
  if (l <= r) {
390
- const m = l + Math.floor((r - l) / 2);
391
- const midNode = sorted[m];
458
+ var m = l + Math.floor((r - l) / 2);
459
+ var midNode = sorted[m];
392
460
  this.add(midNode.id, midNode.val);
393
461
  stack.push([m + 1, r]);
394
462
  stack.push([l, m - 1]);
@@ -397,31 +465,27 @@ class BST extends binary_tree_1.BinaryTree {
397
465
  }
398
466
  return true;
399
467
  }
400
- }
401
- /**
402
- * The function `isAVLBalanced` checks if a binary tree is balanced according to the AVL tree property.
403
- * @returns a boolean value.
404
- */
405
- isAVLBalanced() {
468
+ };
469
+ BST.prototype.isAVLBalanced = function () {
406
470
  var _a, _b;
407
471
  if (!this.root)
408
472
  return true;
409
- let balanced = true;
473
+ var balanced = true;
410
474
  if (this.loopType === types_1.LoopType.RECURSIVE) {
411
- const _height = (cur) => {
475
+ var _height_1 = function (cur) {
412
476
  if (!cur)
413
477
  return 0;
414
- const leftHeight = _height(cur.left), rightHeight = _height(cur.right);
478
+ var leftHeight = _height_1(cur.left), rightHeight = _height_1(cur.right);
415
479
  if (Math.abs(leftHeight - rightHeight) > 1)
416
480
  balanced = false;
417
481
  return Math.max(leftHeight, rightHeight) + 1;
418
482
  };
419
- _height(this.root);
483
+ _height_1(this.root);
420
484
  }
421
485
  else {
422
- const stack = [];
423
- let node = this.root, last = null;
424
- const depths = new Map();
486
+ var stack = [];
487
+ var node = this.root, last = null;
488
+ var depths = new Map();
425
489
  while (stack.length > 0 || node) {
426
490
  if (node) {
427
491
  stack.push(node);
@@ -432,8 +496,8 @@ class BST extends binary_tree_1.BinaryTree {
432
496
  if (!node.right || last === node.right) {
433
497
  node = stack.pop();
434
498
  if (node) {
435
- const left = node.left ? (_a = depths.get(node.left)) !== null && _a !== void 0 ? _a : -1 : -1;
436
- const right = node.right ? (_b = depths.get(node.right)) !== null && _b !== void 0 ? _b : -1 : -1;
499
+ var left = node.left ? (_a = depths.get(node.left)) !== null && _a !== void 0 ? _a : -1 : -1;
500
+ var right = node.right ? (_b = depths.get(node.right)) !== null && _b !== void 0 ? _b : -1 : -1;
437
501
  if (Math.abs(left - right) > 1)
438
502
  return false;
439
503
  depths.set(node, 1 + Math.max(left, right));
@@ -447,23 +511,17 @@ class BST extends binary_tree_1.BinaryTree {
447
511
  }
448
512
  }
449
513
  return balanced;
450
- }
451
- /**
452
- * The function compares two binary tree node IDs using a comparator function and returns whether the first ID is
453
- * greater than, less than, or equal to the second ID.
454
- * @param {BinaryTreeNodeId} a - a is a BinaryTreeNodeId, which represents the identifier of a binary tree node.
455
- * @param {BinaryTreeNodeId} b - The parameter "b" in the above code refers to a BinaryTreeNodeId.
456
- * @returns a value of type CP (ComparisonResult). The possible return values are CP.gt (greater than), CP.lt (less
457
- * than), or CP.eq (equal).
458
- */
459
- _compare(a, b) {
460
- const compared = this._comparator(a, b);
514
+ };
515
+ BST.prototype._compare = function (a, b) {
516
+ var compared = this._comparator(a, b);
461
517
  if (compared > 0)
462
518
  return types_1.CP.gt;
463
519
  else if (compared < 0)
464
520
  return types_1.CP.lt;
465
521
  else
466
522
  return types_1.CP.eq;
467
- }
468
- }
523
+ };
524
+ return BST;
525
+ }(binary_tree_1.BinaryTree));
469
526
  exports.BST = BST;
527
+ //# sourceMappingURL=bst.js.map