data-structure-typed 1.54.0 → 1.54.1

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 (488) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +1 -0
  3. package/benchmark/report.html +1 -28
  4. package/benchmark/report.json +17 -326
  5. package/dist/{mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts → cjs/data-structures/binary-tree/avl-tree-counter.d.ts} +54 -47
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +408 -0
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
  8. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +71 -177
  9. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +135 -340
  10. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +102 -57
  12. package/dist/cjs/data-structures/binary-tree/avl-tree.js +110 -47
  13. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.d.ts +3 -0
  15. package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js +3 -0
  16. package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +240 -190
  18. package/dist/cjs/data-structures/binary-tree/binary-tree.js +269 -240
  19. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/bst.d.ts +145 -112
  21. package/dist/cjs/data-structures/binary-tree/bst.js +180 -129
  22. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  23. package/dist/cjs/data-structures/binary-tree/index.d.ts +2 -0
  24. package/dist/cjs/data-structures/binary-tree/index.js +2 -0
  25. package/dist/cjs/data-structures/binary-tree/index.js.map +1 -1
  26. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +100 -82
  27. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +115 -79
  28. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  29. package/dist/{mjs/data-structures/binary-tree/tree-multi-map.d.ts → cjs/data-structures/binary-tree/tree-counter.d.ts} +74 -64
  30. package/dist/cjs/data-structures/binary-tree/tree-counter.js +445 -0
  31. package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -0
  32. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +78 -174
  33. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +142 -377
  34. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  35. package/dist/cjs/data-structures/graph/directed-graph.d.ts +3 -0
  36. package/dist/cjs/data-structures/graph/directed-graph.js +3 -0
  37. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  38. package/dist/cjs/data-structures/graph/map-graph.d.ts +3 -0
  39. package/dist/cjs/data-structures/graph/map-graph.js +3 -0
  40. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  41. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +3 -0
  42. package/dist/cjs/data-structures/graph/undirected-graph.js +3 -0
  43. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  44. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +3 -0
  45. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +3 -0
  46. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  47. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +3 -0
  48. package/dist/cjs/data-structures/linked-list/skip-linked-list.js +3 -0
  49. package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
  50. package/dist/cjs/data-structures/matrix/matrix.d.ts +3 -0
  51. package/dist/cjs/data-structures/matrix/matrix.js +3 -0
  52. package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
  53. package/dist/cjs/data-structures/matrix/navigator.d.ts +3 -0
  54. package/dist/cjs/data-structures/matrix/navigator.js +3 -0
  55. package/dist/cjs/data-structures/matrix/navigator.js.map +1 -1
  56. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +3 -0
  57. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +3 -0
  58. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  59. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +3 -0
  60. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +3 -0
  61. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  62. package/dist/cjs/data-structures/trie/trie.d.ts +0 -4
  63. package/dist/cjs/data-structures/trie/trie.js +0 -4
  64. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  65. package/dist/cjs/interfaces/binary-tree.d.ts +8 -8
  66. package/dist/cjs/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -0
  67. package/dist/cjs/types/data-structures/binary-tree/avl-tree-counter.js +3 -0
  68. package/dist/cjs/types/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
  69. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -4
  70. package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +0 -3
  71. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +0 -3
  72. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +3 -3
  73. package/dist/cjs/types/data-structures/binary-tree/index.d.ts +2 -0
  74. package/dist/cjs/types/data-structures/binary-tree/index.js +2 -0
  75. package/dist/cjs/types/data-structures/binary-tree/index.js.map +1 -1
  76. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -4
  77. package/dist/cjs/types/data-structures/binary-tree/tree-counter.d.ts +2 -0
  78. package/dist/cjs/types/data-structures/binary-tree/tree-counter.js +3 -0
  79. package/dist/cjs/types/data-structures/binary-tree/tree-counter.js.map +1 -0
  80. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -4
  81. package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +213 -0
  82. package/dist/{mjs/data-structures/binary-tree/avl-tree-multi-map.js → esm/data-structures/binary-tree/avl-tree-counter.js} +73 -60
  83. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
  84. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -0
  85. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +191 -0
  86. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
  87. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +234 -0
  88. package/dist/{mjs → esm}/data-structures/binary-tree/avl-tree.js +110 -47
  89. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -0
  90. package/dist/{mjs → esm}/data-structures/binary-tree/binary-indexed-tree.d.ts +3 -0
  91. package/dist/{mjs → esm}/data-structures/binary-tree/binary-indexed-tree.js +3 -0
  92. package/dist/esm/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
  93. package/dist/{mjs → esm}/data-structures/binary-tree/binary-tree.d.ts +240 -190
  94. package/dist/{mjs → esm}/data-structures/binary-tree/binary-tree.js +272 -245
  95. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -0
  96. package/dist/{mjs → esm}/data-structures/binary-tree/bst.d.ts +145 -112
  97. package/dist/{mjs → esm}/data-structures/binary-tree/bst.js +201 -155
  98. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -0
  99. package/dist/{mjs → esm}/data-structures/binary-tree/index.d.ts +2 -0
  100. package/dist/{mjs → esm}/data-structures/binary-tree/index.js +2 -0
  101. package/dist/{mjs → esm}/data-structures/binary-tree/index.js.map +1 -1
  102. package/dist/{mjs → esm}/data-structures/binary-tree/red-black-tree.d.ts +100 -82
  103. package/dist/{mjs → esm}/data-structures/binary-tree/red-black-tree.js +115 -79
  104. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -0
  105. package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +212 -0
  106. package/dist/{mjs/data-structures/binary-tree/tree-multi-map.js → esm/data-structures/binary-tree/tree-counter.js} +111 -96
  107. package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -0
  108. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +106 -0
  109. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +196 -0
  110. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -0
  111. package/dist/{mjs → esm}/data-structures/graph/directed-graph.d.ts +3 -0
  112. package/dist/{mjs → esm}/data-structures/graph/directed-graph.js +3 -0
  113. package/dist/esm/data-structures/graph/directed-graph.js.map +1 -0
  114. package/dist/{mjs → esm}/data-structures/graph/map-graph.d.ts +3 -0
  115. package/dist/{mjs → esm}/data-structures/graph/map-graph.js +3 -0
  116. package/dist/esm/data-structures/graph/map-graph.js.map +1 -0
  117. package/dist/{mjs → esm}/data-structures/graph/undirected-graph.d.ts +3 -0
  118. package/dist/{mjs → esm}/data-structures/graph/undirected-graph.js +3 -0
  119. package/dist/esm/data-structures/graph/undirected-graph.js.map +1 -0
  120. package/dist/{mjs → esm}/data-structures/linked-list/singly-linked-list.d.ts +3 -0
  121. package/dist/{mjs → esm}/data-structures/linked-list/singly-linked-list.js +3 -0
  122. package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -0
  123. package/dist/{mjs → esm}/data-structures/linked-list/skip-linked-list.d.ts +3 -0
  124. package/dist/{mjs → esm}/data-structures/linked-list/skip-linked-list.js +3 -0
  125. package/dist/esm/data-structures/linked-list/skip-linked-list.js.map +1 -0
  126. package/dist/{mjs → esm}/data-structures/matrix/matrix.d.ts +3 -0
  127. package/dist/{mjs → esm}/data-structures/matrix/matrix.js +3 -0
  128. package/dist/esm/data-structures/matrix/matrix.js.map +1 -0
  129. package/dist/{mjs → esm}/data-structures/matrix/navigator.d.ts +3 -0
  130. package/dist/{mjs → esm}/data-structures/matrix/navigator.js +3 -0
  131. package/dist/esm/data-structures/matrix/navigator.js.map +1 -0
  132. package/dist/{mjs → esm}/data-structures/priority-queue/max-priority-queue.d.ts +3 -0
  133. package/dist/{mjs → esm}/data-structures/priority-queue/max-priority-queue.js +3 -0
  134. package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -0
  135. package/dist/{mjs → esm}/data-structures/priority-queue/min-priority-queue.d.ts +3 -0
  136. package/dist/{mjs → esm}/data-structures/priority-queue/min-priority-queue.js +3 -0
  137. package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -0
  138. package/dist/{mjs → esm}/data-structures/trie/trie.d.ts +0 -4
  139. package/dist/{mjs → esm}/data-structures/trie/trie.js +0 -4
  140. package/dist/esm/data-structures/trie/trie.js.map +1 -0
  141. package/dist/esm/interfaces/binary-tree.d.ts +9 -0
  142. package/dist/esm/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -0
  143. package/dist/esm/types/data-structures/binary-tree/avl-tree-counter.js +2 -0
  144. package/dist/esm/types/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
  145. package/dist/esm/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -0
  146. package/dist/esm/types/data-structures/binary-tree/avl-tree.d.ts +2 -0
  147. package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-tree.d.ts +0 -3
  148. package/dist/{mjs → esm}/types/data-structures/binary-tree/bst.d.ts +3 -3
  149. package/dist/{mjs → esm}/types/data-structures/binary-tree/index.d.ts +2 -0
  150. package/dist/{mjs → esm}/types/data-structures/binary-tree/index.js +2 -0
  151. package/dist/{mjs → esm}/types/data-structures/binary-tree/index.js.map +1 -1
  152. package/dist/esm/types/data-structures/binary-tree/rb-tree.d.ts +3 -0
  153. package/dist/esm/types/data-structures/binary-tree/tree-counter.d.ts +2 -0
  154. package/dist/esm/types/data-structures/binary-tree/tree-counter.js +2 -0
  155. package/dist/esm/types/data-structures/binary-tree/tree-counter.js.map +1 -0
  156. package/dist/esm/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -0
  157. package/dist/umd/data-structure-typed.js +1464 -895
  158. package/dist/umd/data-structure-typed.min.js +5 -5
  159. package/dist/umd/data-structure-typed.min.js.map +1 -1
  160. package/package.json +14 -14
  161. package/src/data-structures/binary-tree/avl-tree-counter.ts +463 -0
  162. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +155 -393
  163. package/src/data-structures/binary-tree/avl-tree.ts +144 -93
  164. package/src/data-structures/binary-tree/binary-indexed-tree.ts +3 -0
  165. package/src/data-structures/binary-tree/binary-tree.ts +433 -405
  166. package/src/data-structures/binary-tree/bst.ts +261 -239
  167. package/src/data-structures/binary-tree/index.ts +2 -0
  168. package/src/data-structures/binary-tree/red-black-tree.ts +163 -134
  169. package/src/data-structures/binary-tree/tree-counter.ts +504 -0
  170. package/src/data-structures/binary-tree/tree-multi-map.ts +161 -429
  171. package/src/data-structures/graph/directed-graph.ts +3 -0
  172. package/src/data-structures/graph/map-graph.ts +3 -0
  173. package/src/data-structures/graph/undirected-graph.ts +3 -0
  174. package/src/data-structures/linked-list/singly-linked-list.ts +3 -0
  175. package/src/data-structures/linked-list/skip-linked-list.ts +3 -0
  176. package/src/data-structures/matrix/matrix.ts +3 -0
  177. package/src/data-structures/matrix/navigator.ts +3 -0
  178. package/src/data-structures/priority-queue/max-priority-queue.ts +3 -0
  179. package/src/data-structures/priority-queue/min-priority-queue.ts +3 -0
  180. package/src/data-structures/trie/trie.ts +0 -4
  181. package/src/interfaces/binary-tree.ts +10 -24
  182. package/src/types/data-structures/binary-tree/avl-tree-counter.ts +3 -0
  183. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +1 -6
  184. package/src/types/data-structures/binary-tree/avl-tree.ts +0 -5
  185. package/src/types/data-structures/binary-tree/binary-tree.ts +0 -5
  186. package/src/types/data-structures/binary-tree/bst.ts +5 -5
  187. package/src/types/data-structures/binary-tree/index.ts +2 -0
  188. package/src/types/data-structures/binary-tree/rb-tree.ts +1 -6
  189. package/src/types/data-structures/binary-tree/tree-counter.ts +3 -0
  190. package/src/types/data-structures/binary-tree/tree-multi-map.ts +1 -6
  191. package/test/integration/all-in-one.test.ts +1 -1
  192. package/test/integration/avl-tree.test.ts +1 -1
  193. package/test/integration/bst.test.ts +2 -2
  194. package/test/integration/compile.js +144 -0
  195. package/test/integration/compile.ts +171 -0
  196. package/test/integration/index.html +48 -48
  197. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +4 -4
  198. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +5 -4
  199. package/test/performance/data-structures/comparison/comparison.test.ts +2 -2
  200. package/test/performance/reportor.ts +5 -3
  201. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +877 -0
  202. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +459 -761
  203. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +223 -223
  204. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +474 -492
  205. package/test/unit/data-structures/binary-tree/bst.test.ts +1 -1
  206. package/test/unit/data-structures/binary-tree/overall.test.ts +0 -3
  207. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +87 -90
  208. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +975 -0
  209. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +729 -857
  210. package/test/unit/data-structures/hash/hash-map.test.ts +1 -1
  211. package/{tsconfig-mjs.json → tsconfig-esm.json} +1 -1
  212. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js.map +0 -1
  213. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +0 -189
  214. package/dist/mjs/data-structures/binary-tree/avl-tree.js.map +0 -1
  215. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js.map +0 -1
  216. package/dist/mjs/data-structures/binary-tree/binary-tree.js.map +0 -1
  217. package/dist/mjs/data-structures/binary-tree/bst.js.map +0 -1
  218. package/dist/mjs/data-structures/binary-tree/red-black-tree.js.map +0 -1
  219. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js.map +0 -1
  220. package/dist/mjs/data-structures/graph/directed-graph.js.map +0 -1
  221. package/dist/mjs/data-structures/graph/map-graph.js.map +0 -1
  222. package/dist/mjs/data-structures/graph/undirected-graph.js.map +0 -1
  223. package/dist/mjs/data-structures/linked-list/singly-linked-list.js.map +0 -1
  224. package/dist/mjs/data-structures/linked-list/skip-linked-list.js.map +0 -1
  225. package/dist/mjs/data-structures/matrix/matrix.js.map +0 -1
  226. package/dist/mjs/data-structures/matrix/navigator.js.map +0 -1
  227. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js.map +0 -1
  228. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js.map +0 -1
  229. package/dist/mjs/data-structures/trie/trie.js.map +0 -1
  230. package/dist/mjs/interfaces/binary-tree.d.ts +0 -9
  231. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -5
  232. package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +0 -5
  233. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +0 -6
  234. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +0 -5
  235. /package/dist/{mjs → esm}/common/index.d.ts +0 -0
  236. /package/dist/{mjs → esm}/common/index.js +0 -0
  237. /package/dist/{mjs → esm}/common/index.js.map +0 -0
  238. /package/dist/{mjs → esm}/data-structures/base/index.d.ts +0 -0
  239. /package/dist/{mjs → esm}/data-structures/base/index.js +0 -0
  240. /package/dist/{mjs → esm}/data-structures/base/index.js.map +0 -0
  241. /package/dist/{mjs → esm}/data-structures/base/iterable-element-base.d.ts +0 -0
  242. /package/dist/{mjs → esm}/data-structures/base/iterable-element-base.js +0 -0
  243. /package/dist/{mjs → esm}/data-structures/base/iterable-element-base.js.map +0 -0
  244. /package/dist/{mjs → esm}/data-structures/base/iterable-entry-base.d.ts +0 -0
  245. /package/dist/{mjs → esm}/data-structures/base/iterable-entry-base.js +0 -0
  246. /package/dist/{mjs → esm}/data-structures/base/iterable-entry-base.js.map +0 -0
  247. /package/dist/{mjs → esm}/data-structures/binary-tree/segment-tree.d.ts +0 -0
  248. /package/dist/{mjs → esm}/data-structures/binary-tree/segment-tree.js +0 -0
  249. /package/dist/{mjs → esm}/data-structures/binary-tree/segment-tree.js.map +0 -0
  250. /package/dist/{mjs → esm}/data-structures/graph/abstract-graph.d.ts +0 -0
  251. /package/dist/{mjs → esm}/data-structures/graph/abstract-graph.js +0 -0
  252. /package/dist/{mjs → esm}/data-structures/graph/abstract-graph.js.map +0 -0
  253. /package/dist/{mjs → esm}/data-structures/graph/index.d.ts +0 -0
  254. /package/dist/{mjs → esm}/data-structures/graph/index.js +0 -0
  255. /package/dist/{mjs → esm}/data-structures/graph/index.js.map +0 -0
  256. /package/dist/{mjs → esm}/data-structures/hash/hash-map.d.ts +0 -0
  257. /package/dist/{mjs → esm}/data-structures/hash/hash-map.js +0 -0
  258. /package/dist/{mjs → esm}/data-structures/hash/hash-map.js.map +0 -0
  259. /package/dist/{mjs → esm}/data-structures/hash/index.d.ts +0 -0
  260. /package/dist/{mjs → esm}/data-structures/hash/index.js +0 -0
  261. /package/dist/{mjs → esm}/data-structures/hash/index.js.map +0 -0
  262. /package/dist/{mjs → esm}/data-structures/heap/heap.d.ts +0 -0
  263. /package/dist/{mjs → esm}/data-structures/heap/heap.js +0 -0
  264. /package/dist/{mjs → esm}/data-structures/heap/heap.js.map +0 -0
  265. /package/dist/{mjs → esm}/data-structures/heap/index.d.ts +0 -0
  266. /package/dist/{mjs → esm}/data-structures/heap/index.js +0 -0
  267. /package/dist/{mjs → esm}/data-structures/heap/index.js.map +0 -0
  268. /package/dist/{mjs → esm}/data-structures/heap/max-heap.d.ts +0 -0
  269. /package/dist/{mjs → esm}/data-structures/heap/max-heap.js +0 -0
  270. /package/dist/{mjs → esm}/data-structures/heap/max-heap.js.map +0 -0
  271. /package/dist/{mjs → esm}/data-structures/heap/min-heap.d.ts +0 -0
  272. /package/dist/{mjs → esm}/data-structures/heap/min-heap.js +0 -0
  273. /package/dist/{mjs → esm}/data-structures/heap/min-heap.js.map +0 -0
  274. /package/dist/{mjs → esm}/data-structures/index.d.ts +0 -0
  275. /package/dist/{mjs → esm}/data-structures/index.js +0 -0
  276. /package/dist/{mjs → esm}/data-structures/index.js.map +0 -0
  277. /package/dist/{mjs → esm}/data-structures/linked-list/doubly-linked-list.d.ts +0 -0
  278. /package/dist/{mjs → esm}/data-structures/linked-list/doubly-linked-list.js +0 -0
  279. /package/dist/{mjs → esm}/data-structures/linked-list/doubly-linked-list.js.map +0 -0
  280. /package/dist/{mjs → esm}/data-structures/linked-list/index.d.ts +0 -0
  281. /package/dist/{mjs → esm}/data-structures/linked-list/index.js +0 -0
  282. /package/dist/{mjs → esm}/data-structures/linked-list/index.js.map +0 -0
  283. /package/dist/{mjs → esm}/data-structures/matrix/index.d.ts +0 -0
  284. /package/dist/{mjs → esm}/data-structures/matrix/index.js +0 -0
  285. /package/dist/{mjs → esm}/data-structures/matrix/index.js.map +0 -0
  286. /package/dist/{mjs → esm}/data-structures/priority-queue/index.d.ts +0 -0
  287. /package/dist/{mjs → esm}/data-structures/priority-queue/index.js +0 -0
  288. /package/dist/{mjs → esm}/data-structures/priority-queue/index.js.map +0 -0
  289. /package/dist/{mjs → esm}/data-structures/priority-queue/priority-queue.d.ts +0 -0
  290. /package/dist/{mjs → esm}/data-structures/priority-queue/priority-queue.js +0 -0
  291. /package/dist/{mjs → esm}/data-structures/priority-queue/priority-queue.js.map +0 -0
  292. /package/dist/{mjs → esm}/data-structures/queue/deque.d.ts +0 -0
  293. /package/dist/{mjs → esm}/data-structures/queue/deque.js +0 -0
  294. /package/dist/{mjs → esm}/data-structures/queue/deque.js.map +0 -0
  295. /package/dist/{mjs → esm}/data-structures/queue/index.d.ts +0 -0
  296. /package/dist/{mjs → esm}/data-structures/queue/index.js +0 -0
  297. /package/dist/{mjs → esm}/data-structures/queue/index.js.map +0 -0
  298. /package/dist/{mjs → esm}/data-structures/queue/queue.d.ts +0 -0
  299. /package/dist/{mjs → esm}/data-structures/queue/queue.js +0 -0
  300. /package/dist/{mjs → esm}/data-structures/queue/queue.js.map +0 -0
  301. /package/dist/{mjs → esm}/data-structures/stack/index.d.ts +0 -0
  302. /package/dist/{mjs → esm}/data-structures/stack/index.js +0 -0
  303. /package/dist/{mjs → esm}/data-structures/stack/index.js.map +0 -0
  304. /package/dist/{mjs → esm}/data-structures/stack/stack.d.ts +0 -0
  305. /package/dist/{mjs → esm}/data-structures/stack/stack.js +0 -0
  306. /package/dist/{mjs → esm}/data-structures/stack/stack.js.map +0 -0
  307. /package/dist/{mjs → esm}/data-structures/tree/index.d.ts +0 -0
  308. /package/dist/{mjs → esm}/data-structures/tree/index.js +0 -0
  309. /package/dist/{mjs → esm}/data-structures/tree/index.js.map +0 -0
  310. /package/dist/{mjs → esm}/data-structures/tree/tree.d.ts +0 -0
  311. /package/dist/{mjs → esm}/data-structures/tree/tree.js +0 -0
  312. /package/dist/{mjs → esm}/data-structures/tree/tree.js.map +0 -0
  313. /package/dist/{mjs → esm}/data-structures/trie/index.d.ts +0 -0
  314. /package/dist/{mjs → esm}/data-structures/trie/index.js +0 -0
  315. /package/dist/{mjs → esm}/data-structures/trie/index.js.map +0 -0
  316. /package/dist/{mjs → esm}/index.d.ts +0 -0
  317. /package/dist/{mjs → esm}/index.js +0 -0
  318. /package/dist/{mjs → esm}/index.js.map +0 -0
  319. /package/dist/{mjs → esm}/interfaces/binary-tree.js +0 -0
  320. /package/dist/{mjs → esm}/interfaces/binary-tree.js.map +0 -0
  321. /package/dist/{mjs → esm}/interfaces/doubly-linked-list.d.ts +0 -0
  322. /package/dist/{mjs → esm}/interfaces/doubly-linked-list.js +0 -0
  323. /package/dist/{mjs → esm}/interfaces/doubly-linked-list.js.map +0 -0
  324. /package/dist/{mjs → esm}/interfaces/graph.d.ts +0 -0
  325. /package/dist/{mjs → esm}/interfaces/graph.js +0 -0
  326. /package/dist/{mjs → esm}/interfaces/graph.js.map +0 -0
  327. /package/dist/{mjs → esm}/interfaces/heap.d.ts +0 -0
  328. /package/dist/{mjs → esm}/interfaces/heap.js +0 -0
  329. /package/dist/{mjs → esm}/interfaces/heap.js.map +0 -0
  330. /package/dist/{mjs → esm}/interfaces/index.d.ts +0 -0
  331. /package/dist/{mjs → esm}/interfaces/index.js +0 -0
  332. /package/dist/{mjs → esm}/interfaces/index.js.map +0 -0
  333. /package/dist/{mjs → esm}/interfaces/navigator.d.ts +0 -0
  334. /package/dist/{mjs → esm}/interfaces/navigator.js +0 -0
  335. /package/dist/{mjs → esm}/interfaces/navigator.js.map +0 -0
  336. /package/dist/{mjs → esm}/interfaces/priority-queue.d.ts +0 -0
  337. /package/dist/{mjs → esm}/interfaces/priority-queue.js +0 -0
  338. /package/dist/{mjs → esm}/interfaces/priority-queue.js.map +0 -0
  339. /package/dist/{mjs → esm}/interfaces/segment-tree.d.ts +0 -0
  340. /package/dist/{mjs → esm}/interfaces/segment-tree.js +0 -0
  341. /package/dist/{mjs → esm}/interfaces/segment-tree.js.map +0 -0
  342. /package/dist/{mjs → esm}/interfaces/singly-linked-list.d.ts +0 -0
  343. /package/dist/{mjs → esm}/interfaces/singly-linked-list.js +0 -0
  344. /package/dist/{mjs → esm}/interfaces/singly-linked-list.js.map +0 -0
  345. /package/dist/{mjs → esm}/types/common.d.ts +0 -0
  346. /package/dist/{mjs → esm}/types/common.js +0 -0
  347. /package/dist/{mjs → esm}/types/common.js.map +0 -0
  348. /package/dist/{mjs → esm}/types/data-structures/base/base.d.ts +0 -0
  349. /package/dist/{mjs → esm}/types/data-structures/base/base.js +0 -0
  350. /package/dist/{mjs → esm}/types/data-structures/base/base.js.map +0 -0
  351. /package/dist/{mjs → esm}/types/data-structures/base/index.d.ts +0 -0
  352. /package/dist/{mjs → esm}/types/data-structures/base/index.js +0 -0
  353. /package/dist/{mjs → esm}/types/data-structures/base/index.js.map +0 -0
  354. /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree-multi-map.js +0 -0
  355. /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree-multi-map.js.map +0 -0
  356. /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree.js +0 -0
  357. /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree.js.map +0 -0
  358. /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-indexed-tree.d.ts +0 -0
  359. /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-indexed-tree.js +0 -0
  360. /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-indexed-tree.js.map +0 -0
  361. /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-tree.js +0 -0
  362. /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-tree.js.map +0 -0
  363. /package/dist/{mjs → esm}/types/data-structures/binary-tree/bst.js +0 -0
  364. /package/dist/{mjs → esm}/types/data-structures/binary-tree/bst.js.map +0 -0
  365. /package/dist/{mjs → esm}/types/data-structures/binary-tree/rb-tree.js +0 -0
  366. /package/dist/{mjs → esm}/types/data-structures/binary-tree/rb-tree.js.map +0 -0
  367. /package/dist/{mjs → esm}/types/data-structures/binary-tree/segment-tree.d.ts +0 -0
  368. /package/dist/{mjs → esm}/types/data-structures/binary-tree/segment-tree.js +0 -0
  369. /package/dist/{mjs → esm}/types/data-structures/binary-tree/segment-tree.js.map +0 -0
  370. /package/dist/{mjs → esm}/types/data-structures/binary-tree/tree-multi-map.js +0 -0
  371. /package/dist/{mjs → esm}/types/data-structures/binary-tree/tree-multi-map.js.map +0 -0
  372. /package/dist/{mjs → esm}/types/data-structures/graph/abstract-graph.d.ts +0 -0
  373. /package/dist/{mjs → esm}/types/data-structures/graph/abstract-graph.js +0 -0
  374. /package/dist/{mjs → esm}/types/data-structures/graph/abstract-graph.js.map +0 -0
  375. /package/dist/{mjs → esm}/types/data-structures/graph/directed-graph.d.ts +0 -0
  376. /package/dist/{mjs → esm}/types/data-structures/graph/directed-graph.js +0 -0
  377. /package/dist/{mjs → esm}/types/data-structures/graph/directed-graph.js.map +0 -0
  378. /package/dist/{mjs → esm}/types/data-structures/graph/index.d.ts +0 -0
  379. /package/dist/{mjs → esm}/types/data-structures/graph/index.js +0 -0
  380. /package/dist/{mjs → esm}/types/data-structures/graph/index.js.map +0 -0
  381. /package/dist/{mjs → esm}/types/data-structures/graph/map-graph.d.ts +0 -0
  382. /package/dist/{mjs → esm}/types/data-structures/graph/map-graph.js +0 -0
  383. /package/dist/{mjs → esm}/types/data-structures/graph/map-graph.js.map +0 -0
  384. /package/dist/{mjs → esm}/types/data-structures/graph/undirected-graph.d.ts +0 -0
  385. /package/dist/{mjs → esm}/types/data-structures/graph/undirected-graph.js +0 -0
  386. /package/dist/{mjs → esm}/types/data-structures/graph/undirected-graph.js.map +0 -0
  387. /package/dist/{mjs → esm}/types/data-structures/hash/hash-map.d.ts +0 -0
  388. /package/dist/{mjs → esm}/types/data-structures/hash/hash-map.js +0 -0
  389. /package/dist/{mjs → esm}/types/data-structures/hash/hash-map.js.map +0 -0
  390. /package/dist/{mjs → esm}/types/data-structures/hash/index.d.ts +0 -0
  391. /package/dist/{mjs → esm}/types/data-structures/hash/index.js +0 -0
  392. /package/dist/{mjs → esm}/types/data-structures/hash/index.js.map +0 -0
  393. /package/dist/{mjs → esm}/types/data-structures/heap/heap.d.ts +0 -0
  394. /package/dist/{mjs → esm}/types/data-structures/heap/heap.js +0 -0
  395. /package/dist/{mjs → esm}/types/data-structures/heap/heap.js.map +0 -0
  396. /package/dist/{mjs → esm}/types/data-structures/heap/index.d.ts +0 -0
  397. /package/dist/{mjs → esm}/types/data-structures/heap/index.js +0 -0
  398. /package/dist/{mjs → esm}/types/data-structures/heap/index.js.map +0 -0
  399. /package/dist/{mjs → esm}/types/data-structures/heap/max-heap.d.ts +0 -0
  400. /package/dist/{mjs → esm}/types/data-structures/heap/max-heap.js +0 -0
  401. /package/dist/{mjs → esm}/types/data-structures/heap/max-heap.js.map +0 -0
  402. /package/dist/{mjs → esm}/types/data-structures/heap/min-heap.d.ts +0 -0
  403. /package/dist/{mjs → esm}/types/data-structures/heap/min-heap.js +0 -0
  404. /package/dist/{mjs → esm}/types/data-structures/heap/min-heap.js.map +0 -0
  405. /package/dist/{mjs → esm}/types/data-structures/index.d.ts +0 -0
  406. /package/dist/{mjs → esm}/types/data-structures/index.js +0 -0
  407. /package/dist/{mjs → esm}/types/data-structures/index.js.map +0 -0
  408. /package/dist/{mjs → esm}/types/data-structures/linked-list/doubly-linked-list.d.ts +0 -0
  409. /package/dist/{mjs → esm}/types/data-structures/linked-list/doubly-linked-list.js +0 -0
  410. /package/dist/{mjs → esm}/types/data-structures/linked-list/doubly-linked-list.js.map +0 -0
  411. /package/dist/{mjs → esm}/types/data-structures/linked-list/index.d.ts +0 -0
  412. /package/dist/{mjs → esm}/types/data-structures/linked-list/index.js +0 -0
  413. /package/dist/{mjs → esm}/types/data-structures/linked-list/index.js.map +0 -0
  414. /package/dist/{mjs → esm}/types/data-structures/linked-list/singly-linked-list.d.ts +0 -0
  415. /package/dist/{mjs → esm}/types/data-structures/linked-list/singly-linked-list.js +0 -0
  416. /package/dist/{mjs → esm}/types/data-structures/linked-list/singly-linked-list.js.map +0 -0
  417. /package/dist/{mjs → esm}/types/data-structures/linked-list/skip-linked-list.d.ts +0 -0
  418. /package/dist/{mjs → esm}/types/data-structures/linked-list/skip-linked-list.js +0 -0
  419. /package/dist/{mjs → esm}/types/data-structures/linked-list/skip-linked-list.js.map +0 -0
  420. /package/dist/{mjs → esm}/types/data-structures/matrix/index.d.ts +0 -0
  421. /package/dist/{mjs → esm}/types/data-structures/matrix/index.js +0 -0
  422. /package/dist/{mjs → esm}/types/data-structures/matrix/index.js.map +0 -0
  423. /package/dist/{mjs → esm}/types/data-structures/matrix/matrix.d.ts +0 -0
  424. /package/dist/{mjs → esm}/types/data-structures/matrix/matrix.js +0 -0
  425. /package/dist/{mjs → esm}/types/data-structures/matrix/matrix.js.map +0 -0
  426. /package/dist/{mjs → esm}/types/data-structures/matrix/navigator.d.ts +0 -0
  427. /package/dist/{mjs → esm}/types/data-structures/matrix/navigator.js +0 -0
  428. /package/dist/{mjs → esm}/types/data-structures/matrix/navigator.js.map +0 -0
  429. /package/dist/{mjs → esm}/types/data-structures/priority-queue/index.d.ts +0 -0
  430. /package/dist/{mjs → esm}/types/data-structures/priority-queue/index.js +0 -0
  431. /package/dist/{mjs → esm}/types/data-structures/priority-queue/index.js.map +0 -0
  432. /package/dist/{mjs → esm}/types/data-structures/priority-queue/max-priority-queue.d.ts +0 -0
  433. /package/dist/{mjs → esm}/types/data-structures/priority-queue/max-priority-queue.js +0 -0
  434. /package/dist/{mjs → esm}/types/data-structures/priority-queue/max-priority-queue.js.map +0 -0
  435. /package/dist/{mjs → esm}/types/data-structures/priority-queue/min-priority-queue.d.ts +0 -0
  436. /package/dist/{mjs → esm}/types/data-structures/priority-queue/min-priority-queue.js +0 -0
  437. /package/dist/{mjs → esm}/types/data-structures/priority-queue/min-priority-queue.js.map +0 -0
  438. /package/dist/{mjs → esm}/types/data-structures/priority-queue/priority-queue.d.ts +0 -0
  439. /package/dist/{mjs → esm}/types/data-structures/priority-queue/priority-queue.js +0 -0
  440. /package/dist/{mjs → esm}/types/data-structures/priority-queue/priority-queue.js.map +0 -0
  441. /package/dist/{mjs → esm}/types/data-structures/queue/deque.d.ts +0 -0
  442. /package/dist/{mjs → esm}/types/data-structures/queue/deque.js +0 -0
  443. /package/dist/{mjs → esm}/types/data-structures/queue/deque.js.map +0 -0
  444. /package/dist/{mjs → esm}/types/data-structures/queue/index.d.ts +0 -0
  445. /package/dist/{mjs → esm}/types/data-structures/queue/index.js +0 -0
  446. /package/dist/{mjs → esm}/types/data-structures/queue/index.js.map +0 -0
  447. /package/dist/{mjs → esm}/types/data-structures/queue/queue.d.ts +0 -0
  448. /package/dist/{mjs → esm}/types/data-structures/queue/queue.js +0 -0
  449. /package/dist/{mjs → esm}/types/data-structures/queue/queue.js.map +0 -0
  450. /package/dist/{mjs → esm}/types/data-structures/stack/index.d.ts +0 -0
  451. /package/dist/{mjs → esm}/types/data-structures/stack/index.js +0 -0
  452. /package/dist/{mjs → esm}/types/data-structures/stack/index.js.map +0 -0
  453. /package/dist/{mjs → esm}/types/data-structures/stack/stack.d.ts +0 -0
  454. /package/dist/{mjs → esm}/types/data-structures/stack/stack.js +0 -0
  455. /package/dist/{mjs → esm}/types/data-structures/stack/stack.js.map +0 -0
  456. /package/dist/{mjs → esm}/types/data-structures/tree/index.d.ts +0 -0
  457. /package/dist/{mjs → esm}/types/data-structures/tree/index.js +0 -0
  458. /package/dist/{mjs → esm}/types/data-structures/tree/index.js.map +0 -0
  459. /package/dist/{mjs → esm}/types/data-structures/tree/tree.d.ts +0 -0
  460. /package/dist/{mjs → esm}/types/data-structures/tree/tree.js +0 -0
  461. /package/dist/{mjs → esm}/types/data-structures/tree/tree.js.map +0 -0
  462. /package/dist/{mjs → esm}/types/data-structures/trie/index.d.ts +0 -0
  463. /package/dist/{mjs → esm}/types/data-structures/trie/index.js +0 -0
  464. /package/dist/{mjs → esm}/types/data-structures/trie/index.js.map +0 -0
  465. /package/dist/{mjs → esm}/types/data-structures/trie/trie.d.ts +0 -0
  466. /package/dist/{mjs → esm}/types/data-structures/trie/trie.js +0 -0
  467. /package/dist/{mjs → esm}/types/data-structures/trie/trie.js.map +0 -0
  468. /package/dist/{mjs → esm}/types/index.d.ts +0 -0
  469. /package/dist/{mjs → esm}/types/index.js +0 -0
  470. /package/dist/{mjs → esm}/types/index.js.map +0 -0
  471. /package/dist/{mjs → esm}/types/utils/index.d.ts +0 -0
  472. /package/dist/{mjs → esm}/types/utils/index.js +0 -0
  473. /package/dist/{mjs → esm}/types/utils/index.js.map +0 -0
  474. /package/dist/{mjs → esm}/types/utils/utils.d.ts +0 -0
  475. /package/dist/{mjs → esm}/types/utils/utils.js +0 -0
  476. /package/dist/{mjs → esm}/types/utils/utils.js.map +0 -0
  477. /package/dist/{mjs → esm}/types/utils/validate-type.d.ts +0 -0
  478. /package/dist/{mjs → esm}/types/utils/validate-type.js +0 -0
  479. /package/dist/{mjs → esm}/types/utils/validate-type.js.map +0 -0
  480. /package/dist/{mjs → esm}/utils/index.d.ts +0 -0
  481. /package/dist/{mjs → esm}/utils/index.js +0 -0
  482. /package/dist/{mjs → esm}/utils/index.js.map +0 -0
  483. /package/dist/{mjs → esm}/utils/number.d.ts +0 -0
  484. /package/dist/{mjs → esm}/utils/number.js +0 -0
  485. /package/dist/{mjs → esm}/utils/number.js.map +0 -0
  486. /package/dist/{mjs → esm}/utils/utils.d.ts +0 -0
  487. /package/dist/{mjs → esm}/utils/utils.js +0 -0
  488. /package/dist/{mjs → esm}/utils/utils.js.map +0 -0
@@ -1,8 +1,5 @@
1
- import { BinaryTree, BinaryTreeNode } from '../../../data-structures';
2
1
  import { IterationType, OptValue } from '../../common';
3
2
  import { DFSOperation } from '../../../common';
4
- export type BinaryTreeNodeNested<K, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>;
5
- export type BinaryTreeNested<K, V, R, MK, MV, MR, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, R, MK, MV, MR, NODE, BinaryTree<K, V, R, MK, MV, MR, NODE, BinaryTree<K, V, R, MK, MV, MR, NODE, any>>>;
6
3
  export type ToEntryFn<K, V, R> = (rawElement: R) => BTNEntry<K, V>;
7
4
  export type BinaryTreeOptions<K, V, R> = {
8
5
  iterationType?: IterationType;
@@ -1,12 +1,12 @@
1
- import { BST, BSTNode } from '../../../data-structures';
2
1
  import type { BinaryTreeOptions } from './binary-tree';
3
2
  import { Comparable } from '../../utils';
4
- export type BSTNodeNested<K, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>;
5
- export type BSTNested<K, V, R, MK, MV, MR, NODE extends BSTNode<K, V, NODE>> = BST<K, V, R, MK, MV, MR, NODE, BST<K, V, R, MK, MV, MR, NODE, BST<K, V, R, MK, MV, MR, NODE, any>>>;
3
+ import { OptValue } from '../../common';
6
4
  export type BSTOptions<K, V, R> = BinaryTreeOptions<K, V, R> & {
7
5
  specifyComparable?: (key: K) => Comparable;
8
6
  isReverse?: boolean;
9
7
  };
10
8
  export type BSTNOptKey<K> = K | undefined;
11
9
  export type OptNode<NODE> = NODE | undefined;
10
+ export type BSTNEntry<K, V> = [BSTNOptKey<K>, OptValue<V>];
12
11
  export type BSTNOptKeyOrNode<K, NODE> = BSTNOptKey<K> | NODE;
12
+ export type BSTNRep<K, V, NODE> = BSTNEntry<K, V> | BSTNOptKeyOrNode<K, NODE>;
@@ -5,3 +5,5 @@ export * from './segment-tree';
5
5
  export * from './avl-tree-multi-map';
6
6
  export * from './rb-tree';
7
7
  export * from './tree-multi-map';
8
+ export * from './tree-counter';
9
+ export * from './avl-tree-counter';
@@ -21,4 +21,6 @@ __exportStar(require("./segment-tree"), exports);
21
21
  __exportStar(require("./avl-tree-multi-map"), exports);
22
22
  __exportStar(require("./rb-tree"), exports);
23
23
  __exportStar(require("./tree-multi-map"), exports);
24
+ __exportStar(require("./tree-counter"), exports);
25
+ __exportStar(require("./avl-tree-counter"), exports);
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/types/data-structures/binary-tree/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wCAAsB;AACtB,6CAA2B;AAC3B,iDAA+B;AAC/B,uDAAqC;AACrC,4CAA0B;AAC1B,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/types/data-structures/binary-tree/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wCAAsB;AACtB,6CAA2B;AAC3B,iDAA+B;AAC/B,uDAAqC;AACrC,4CAA0B;AAC1B,mDAAiC;AACjC,iDAA+B;AAC/B,qDAAmC"}
@@ -1,6 +1,3 @@
1
- import { RedBlackTree, RedBlackTreeNode } from '../../../data-structures';
2
- import type { BSTOptions } from "./bst";
1
+ import type { BSTOptions } from './bst';
3
2
  export type RBTNColor = 'RED' | 'BLACK';
4
- export type RedBlackTreeNodeNested<K, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>;
5
- export type RedBlackTreeNested<K, V, R, MK, MV, MR, NODE extends RedBlackTreeNode<K, V, NODE>> = RedBlackTree<K, V, R, MK, MV, MR, NODE, RedBlackTree<K, V, R, MK, MV, MR, NODE, RedBlackTree<K, V, R, MK, MV, MR, NODE, any>>>;
6
3
  export type RedBlackTreeOptions<K, V, R> = BSTOptions<K, V, R> & {};
@@ -0,0 +1,2 @@
1
+ import type { RedBlackTreeOptions } from './rb-tree';
2
+ export type TreeCounterOptions<K, V, R> = RedBlackTreeOptions<K, V, R> & {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tree-counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-counter.js","sourceRoot":"","sources":["../../../../../src/types/data-structures/binary-tree/tree-counter.ts"],"names":[],"mappings":""}
@@ -1,5 +1,2 @@
1
- import { TreeMultiMap, TreeMultiMapNode } from '../../../data-structures';
2
1
  import type { RedBlackTreeOptions } from './rb-tree';
3
- export type TreeMultiMapNodeNested<K, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>;
4
- export type TreeMultiMapNested<K, V, R, MK, MV, MR, NODE extends TreeMultiMapNode<K, V, NODE>> = TreeMultiMap<K, V, R, MK, MV, MR, NODE, TreeMultiMap<K, V, R, MK, MV, MR, NODE, TreeMultiMap<K, V, R, MK, MV, MR, NODE, any>>>;
5
- export type TreeMultiMapOptions<K, V, R> = RedBlackTreeOptions<K, V, R> & {};
2
+ export type TreeMultiMapOptions<K, V, R> = Omit<RedBlackTreeOptions<K, V, R>, 'isMapMode'> & {};
@@ -0,0 +1,213 @@
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Pablo Zeng
5
+ * @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
6
+ * @license MIT License
7
+ */
8
+ import type { AVLTreeCounterOptions, BinaryTreeDeleteResult, BSTNOptKeyOrNode, BTNRep, EntryCallback, IterationType, OptNodeOrNull } from '../../types';
9
+ import { IBinaryTree } from '../../interfaces';
10
+ import { AVLTree, AVLTreeNode } from './avl-tree';
11
+ export declare class AVLTreeCounterNode<K = any, V = any> extends AVLTreeNode<K, V> {
12
+ /**
13
+ * The constructor function initializes a BinaryTreeNode object with a key, value, and count.
14
+ * @param {K} key - The `key` parameter is of type `K` and represents the unique identifier
15
+ * of the binary tree node.
16
+ * @param {V} [value] - The `value` parameter is an optional parameter of type `V`. It represents the value of the binary
17
+ * tree node. If no value is provided, it will be `undefined`.
18
+ * @param {number} [count=1] - The `count` parameter is a number that represents the number of times a particular value
19
+ * occurs in a binary tree node. It has a default value of 1, which means that if no value is provided for the `count`
20
+ * parameter when creating a new instance of the `BinaryTreeNode` class.
21
+ */
22
+ constructor(key: K, value?: V, count?: number);
23
+ parent?: AVLTreeCounterNode<K, V>;
24
+ _left?: OptNodeOrNull<AVLTreeCounterNode<K, V>>;
25
+ get left(): OptNodeOrNull<AVLTreeCounterNode<K, V>>;
26
+ set left(v: OptNodeOrNull<AVLTreeCounterNode<K, V>>);
27
+ _right?: OptNodeOrNull<AVLTreeCounterNode<K, V>>;
28
+ get right(): OptNodeOrNull<AVLTreeCounterNode<K, V>>;
29
+ set right(v: OptNodeOrNull<AVLTreeCounterNode<K, V>>);
30
+ }
31
+ /**
32
+ * The only distinction between a AVLTreeCounter and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
33
+ */
34
+ export declare class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR = object> extends AVLTree<K, V, R, MK, MV, MR> implements IBinaryTree<K, V, R, MK, MV, MR> {
35
+ /**
36
+ * The constructor initializes a new AVLTreeCounter object with optional initial elements.
37
+ * @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter is an
38
+ * iterable object that can contain either keys, nodes, entries, or raw elements.
39
+ * @param [options] - The `options` parameter is an optional object that can be used to customize the
40
+ * behavior of the AVLTreeCounter. It can include properties such as `compareKeys` and
41
+ * `compareValues` functions to define custom comparison logic for keys and values, respectively.
42
+ */
43
+ constructor(keysNodesEntriesOrRaws?: Iterable<BTNRep<K, V, AVLTreeCounterNode<K, V>> | R>, options?: AVLTreeCounterOptions<K, V, R>);
44
+ protected _count: number;
45
+ /**
46
+ * The function calculates the sum of the count property of all nodes in a tree using depth-first
47
+ * search.
48
+ * @returns the sum of the count property of all nodes in the tree.
49
+ */
50
+ get count(): number;
51
+ /**
52
+ * Time Complexity: O(n)
53
+ * Space Complexity: O(1)
54
+ *
55
+ * The function calculates the sum of the count property of all nodes in a tree using depth-first
56
+ * search.
57
+ * @returns the sum of the count property of all nodes in the tree.
58
+ */
59
+ getComputedCount(): number;
60
+ /**
61
+ * The function creates a new AVLTreeCounterNode with the specified key, value, and count.
62
+ * @param {K} key - The key parameter represents the key of the node being created. It is of type K,
63
+ * which is a generic type that can be replaced with any specific type when using the function.
64
+ * @param {V} [value] - The `value` parameter is an optional parameter that represents the value
65
+ * associated with the key in the node. It is of type `V`, which can be any data type.
66
+ * @param {number} [count] - The `count` parameter represents the number of occurrences of a
67
+ * key-value pair in the AVLTreeCounterNode. It is an optional parameter, so it can be omitted when
68
+ * calling the `createNode` method. If provided, it specifies the initial count for the node.
69
+ * @returns a new instance of the AVLTreeCounterNode class, casted as AVLTreeCounterNode<K, V>.
70
+ */
71
+ createNode(key: K, value?: V, count?: number): AVLTreeCounterNode<K, V>;
72
+ /**
73
+ * The function creates a new AVLTreeCounter object with the specified options and returns it.
74
+ * @param [options] - The `options` parameter is an optional object that contains additional
75
+ * configuration options for creating the AVLTreeCounter. It can have the following properties:
76
+ * @returns a new instance of the AVLTreeCounter class, with the specified options, as a TREE
77
+ * object.
78
+ */
79
+ createTree(options?: AVLTreeCounterOptions<K, V, R>): AVLTreeCounter<K, V, R, MK, MV, MR>;
80
+ /**
81
+ * The function checks if the input is an instance of AVLTreeCounterNode.
82
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The parameter
83
+ * `keyNodeOrEntry` can be of type `R` or `BTNRep<K, V, AVLTreeCounterNode<K, V>>`.
84
+ * @returns a boolean value indicating whether the input parameter `keyNodeOrEntry` is
85
+ * an instance of the `AVLTreeCounterNode` class.
86
+ */
87
+ isNode(keyNodeOrEntry: BTNRep<K, V, AVLTreeCounterNode<K, V>>): keyNodeOrEntry is AVLTreeCounterNode<K, V>;
88
+ /**
89
+ * Time Complexity: O(log n)
90
+ * Space Complexity: O(1)
91
+ *
92
+ * The function overrides the add method of a TypeScript class to add a new node to a data structure
93
+ * and update the count.
94
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The
95
+ * `keyNodeOrEntry` parameter can accept a value of type `R`, which can be any type. It
96
+ * can also accept a value of type `BTNRep<K, V, AVLTreeCounterNode<K, V>>`, which represents a key, node,
97
+ * entry, or raw element
98
+ * @param {V} [value] - The `value` parameter represents the value associated with the key in the
99
+ * data structure. It is an optional parameter, so it can be omitted if not needed.
100
+ * @param [count=1] - The `count` parameter represents the number of times the key-value pair should
101
+ * be added to the data structure. By default, it is set to 1, meaning that the key-value pair will
102
+ * be added once. However, you can specify a different value for `count` if you want to add
103
+ * @returns a boolean value.
104
+ */
105
+ add(keyNodeOrEntry: BTNRep<K, V, AVLTreeCounterNode<K, V>>, value?: V, count?: number): boolean;
106
+ /**
107
+ * Time Complexity: O(log n)
108
+ * Space Complexity: O(1)
109
+ *
110
+ * The function overrides the delete method in a binary tree data structure, handling deletion of
111
+ * nodes and maintaining balance in the tree.
112
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The `predicate`
113
+ * parameter in the `delete` method is used to specify the condition for deleting a node from the
114
+ * binary tree. It can be a key, node, or entry that determines which
115
+ * node(s) should be deleted.
116
+ * @param [ignoreCount=false] - The `ignoreCount` parameter in the `override delete` method is a
117
+ * boolean flag that determines whether to ignore the count of the node being deleted. If
118
+ * `ignoreCount` is set to `true`, the method will delete the node regardless of its count. If
119
+ * `ignoreCount` is set to
120
+ * @returns The `delete` method overrides the default delete behavior in a binary tree data
121
+ * structure. It takes a predicate or node to be deleted and an optional flag to ignore count. The
122
+ * method returns an array of `BinaryTreeDeleteResult` objects, each containing information about the
123
+ * deleted node and whether balancing is needed in the tree.
124
+ */
125
+ delete(keyNodeOrEntry: BTNRep<K, V, AVLTreeCounterNode<K, V>>, ignoreCount?: boolean): BinaryTreeDeleteResult<AVLTreeCounterNode<K, V>>[];
126
+ /**
127
+ * Time Complexity: O(1)
128
+ * Space Complexity: O(1)
129
+ *
130
+ * The "clear" function overrides the parent class's "clear" function and also resets the count to
131
+ * zero.
132
+ */
133
+ clear(): void;
134
+ /**
135
+ * Time Complexity: O(n log n)
136
+ * Space Complexity: O(log n)
137
+ * The `perfectlyBalance` function takes a sorted array of nodes and builds a balanced binary search
138
+ * tree using either a recursive or iterative approach.
139
+ * @param {IterationType} iterationType - The `iterationType` parameter is an optional parameter that
140
+ * specifies the type of iteration to use when building the balanced binary search tree. It has a
141
+ * default value of `this.iterationType`, which means it will use the iteration type currently set in
142
+ * the object.
143
+ * @returns The function `perfectlyBalance` returns a boolean value. It returns `true` if the
144
+ * balancing operation is successful, and `false` if there are no nodes to balance.
145
+ */
146
+ perfectlyBalance(iterationType?: IterationType): boolean;
147
+ /**
148
+ * Time complexity: O(n)
149
+ * Space complexity: O(n)
150
+ *
151
+ * The function overrides the clone method to create a deep copy of a tree object.
152
+ * @returns The `clone()` method is returning a cloned instance of the `TREE` object.
153
+ */
154
+ clone(): AVLTreeCounter<K, V, R, MK, MV, MR>;
155
+ /**
156
+ * The `map` function in TypeScript overrides the default behavior to create a new AVLTreeCounter
157
+ * with modified entries based on a provided callback.
158
+ * @param callback - The `callback` parameter is a function that will be called for each entry in the
159
+ * AVLTreeCounter. It takes four arguments:
160
+ * @param [options] - The `options` parameter in the `override map` function is of type
161
+ * `AVLTreeCounterOptions<MK, MV, MR>`. This parameter allows you to provide additional
162
+ * configuration options when creating a new `AVLTreeCounter` instance within the `map` function.
163
+ * These options
164
+ * @param {any} [thisArg] - The `thisArg` parameter in the `override map` function is used to specify
165
+ * the value of `this` when executing the `callback` function. It allows you to set the context
166
+ * (value of `this`) for the callback function. This can be useful when you want to access properties
167
+ * or
168
+ * @returns The `map` method is returning a new `AVLTreeCounter` instance with the entries
169
+ * transformed by the provided `callback` function. Each entry in the original tree is passed to the
170
+ * `callback` function along with the index and the original tree itself. The transformed entries are
171
+ * then added to the new `AVLTreeCounter` instance, which is returned at the end.
172
+ */
173
+ map<MK, MV, MR>(callback: EntryCallback<K, V | undefined, [MK, MV]>, options?: AVLTreeCounterOptions<MK, MV, MR>, thisArg?: any): AVLTreeCounter<MK, MV, MR>;
174
+ /**
175
+ * The function `keyValueNodeEntryRawToNodeAndValue` converts a key, value, entry, or raw element into
176
+ * a node object.
177
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The
178
+ * `keyNodeOrEntry` parameter can be of type `R` or `BTNRep<K, V, AVLTreeCounterNode<K, V>>`.
179
+ * @param {V} [value] - The `value` parameter is an optional value that can be passed to the
180
+ * `override` function. It represents the value associated with the key in the data structure. If no
181
+ * value is provided, it will default to `undefined`.
182
+ * @param [count=1] - The `count` parameter is an optional parameter that specifies the number of
183
+ * times the key-value pair should be added to the data structure. If not provided, it defaults to 1.
184
+ * @returns either a AVLTreeCounterNode<K, V> object or undefined.
185
+ */
186
+ protected _keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry: BTNRep<K, V, AVLTreeCounterNode<K, V>>, value?: V, count?: number): [AVLTreeCounterNode<K, V> | undefined, V | undefined];
187
+ /**
188
+ * Time Complexity: O(1)
189
+ * Space Complexity: O(1)
190
+ *
191
+ * The `_swapProperties` function swaps the properties (key, value, count, height) between two nodes
192
+ * in a binary search tree.
193
+ * @param {BSTNOptKeyOrNode<K, AVLTreeCounterNode<K, V>>} srcNode - The `srcNode` parameter represents the source node
194
+ * that will be swapped with the `destNode`.
195
+ * @param {BSTNOptKeyOrNode<K, AVLTreeCounterNode<K, V>>} destNode - The `destNode` parameter represents the destination
196
+ * node where the properties will be swapped with the source node.
197
+ * @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
198
+ * If either `srcNode` or `destNode` is undefined, it returns `undefined`.
199
+ */
200
+ protected _swapProperties(srcNode: BSTNOptKeyOrNode<K, AVLTreeCounterNode<K, V>>, destNode: BSTNOptKeyOrNode<K, AVLTreeCounterNode<K, V>>): AVLTreeCounterNode<K, V> | undefined;
201
+ /**
202
+ * Time Complexity: O(1)
203
+ * Space Complexity: O(1)
204
+ *
205
+ * The function replaces an old node with a new node and updates the count property of the new node.
206
+ * @param {AVLTreeCounterNode<K, V>} oldNode - The oldNode parameter represents the node that needs to be replaced in the
207
+ * data structure. It is of type AVLTreeCounterNode<K, V>.
208
+ * @param {AVLTreeCounterNode<K, V>} newNode - The `newNode` parameter is an instance of the `AVLTreeCounterNode<K, V>` class.
209
+ * @returns The method is returning the result of calling the `_replaceNode` method from the
210
+ * superclass, which is of type `AVLTreeCounterNode<K, V>`.
211
+ */
212
+ protected _replaceNode(oldNode: AVLTreeCounterNode<K, V>, newNode: AVLTreeCounterNode<K, V>): AVLTreeCounterNode<K, V>;
213
+ }
@@ -1,5 +1,5 @@
1
1
  import { AVLTree, AVLTreeNode } from './avl-tree';
2
- export class AVLTreeMultiMapNode extends AVLTreeNode {
2
+ export class AVLTreeCounterNode extends AVLTreeNode {
3
3
  /**
4
4
  * The constructor function initializes a BinaryTreeNode object with a key, value, and count.
5
5
  * @param {K} key - The `key` parameter is of type `K` and represents the unique identifier
@@ -14,17 +14,38 @@ export class AVLTreeMultiMapNode extends AVLTreeNode {
14
14
  super(key, value);
15
15
  this.count = count;
16
16
  }
17
+ parent = undefined;
18
+ _left = undefined;
19
+ get left() {
20
+ return this._left;
21
+ }
22
+ set left(v) {
23
+ if (v) {
24
+ v.parent = this;
25
+ }
26
+ this._left = v;
27
+ }
28
+ _right = undefined;
29
+ get right() {
30
+ return this._right;
31
+ }
32
+ set right(v) {
33
+ if (v) {
34
+ v.parent = this;
35
+ }
36
+ this._right = v;
37
+ }
17
38
  }
18
39
  /**
19
- * The only distinction between a AVLTreeMultiMap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
40
+ * The only distinction between a AVLTreeCounter and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
20
41
  */
21
- export class AVLTreeMultiMap extends AVLTree {
42
+ export class AVLTreeCounter extends AVLTree {
22
43
  /**
23
- * The constructor initializes a new AVLTreeMultiMap object with optional initial elements.
44
+ * The constructor initializes a new AVLTreeCounter object with optional initial elements.
24
45
  * @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter is an
25
46
  * iterable object that can contain either keys, nodes, entries, or raw elements.
26
47
  * @param [options] - The `options` parameter is an optional object that can be used to customize the
27
- * behavior of the AVLTreeMultiMap. It can include properties such as `compareKeys` and
48
+ * behavior of the AVLTreeCounter. It can include properties such as `compareKeys` and
28
49
  * `compareValues` functions to define custom comparison logic for keys and values, respectively.
29
50
  */
30
51
  constructor(keysNodesEntriesOrRaws = [], options) {
@@ -55,28 +76,28 @@ export class AVLTreeMultiMap extends AVLTree {
55
76
  return sum;
56
77
  }
57
78
  /**
58
- * The function creates a new AVLTreeMultiMapNode with the specified key, value, and count.
79
+ * The function creates a new AVLTreeCounterNode with the specified key, value, and count.
59
80
  * @param {K} key - The key parameter represents the key of the node being created. It is of type K,
60
81
  * which is a generic type that can be replaced with any specific type when using the function.
61
82
  * @param {V} [value] - The `value` parameter is an optional parameter that represents the value
62
83
  * associated with the key in the node. It is of type `V`, which can be any data type.
63
84
  * @param {number} [count] - The `count` parameter represents the number of occurrences of a
64
- * key-value pair in the AVLTreeMultiMapNode. It is an optional parameter, so it can be omitted when
85
+ * key-value pair in the AVLTreeCounterNode. It is an optional parameter, so it can be omitted when
65
86
  * calling the `createNode` method. If provided, it specifies the initial count for the node.
66
- * @returns a new instance of the AVLTreeMultiMapNode class, casted as NODE.
87
+ * @returns a new instance of the AVLTreeCounterNode class, casted as AVLTreeCounterNode<K, V>.
67
88
  */
68
89
  createNode(key, value, count) {
69
- return new AVLTreeMultiMapNode(key, this._isMapMode ? undefined : value, count);
90
+ return new AVLTreeCounterNode(key, this._isMapMode ? undefined : value, count);
70
91
  }
71
92
  /**
72
- * The function creates a new AVLTreeMultiMap object with the specified options and returns it.
93
+ * The function creates a new AVLTreeCounter object with the specified options and returns it.
73
94
  * @param [options] - The `options` parameter is an optional object that contains additional
74
- * configuration options for creating the AVLTreeMultiMap. It can have the following properties:
75
- * @returns a new instance of the AVLTreeMultiMap class, with the specified options, as a TREE
95
+ * configuration options for creating the AVLTreeCounter. It can have the following properties:
96
+ * @returns a new instance of the AVLTreeCounter class, with the specified options, as a TREE
76
97
  * object.
77
98
  */
78
99
  createTree(options) {
79
- return new AVLTreeMultiMap([], {
100
+ return new AVLTreeCounter([], {
80
101
  iterationType: this.iterationType,
81
102
  isMapMode: this._isMapMode,
82
103
  specifyComparable: this._specifyComparable,
@@ -86,14 +107,14 @@ export class AVLTreeMultiMap extends AVLTree {
86
107
  });
87
108
  }
88
109
  /**
89
- * The function checks if the input is an instance of AVLTreeMultiMapNode.
90
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
91
- * `keyNodeEntryOrRaw` can be of type `R` or `BTNRep<K, V, NODE>`.
92
- * @returns a boolean value indicating whether the input parameter `keyNodeEntryOrRaw` is
93
- * an instance of the `AVLTreeMultiMapNode` class.
110
+ * The function checks if the input is an instance of AVLTreeCounterNode.
111
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The parameter
112
+ * `keyNodeOrEntry` can be of type `R` or `BTNRep<K, V, AVLTreeCounterNode<K, V>>`.
113
+ * @returns a boolean value indicating whether the input parameter `keyNodeOrEntry` is
114
+ * an instance of the `AVLTreeCounterNode` class.
94
115
  */
95
- isNode(keyNodeEntryOrRaw) {
96
- return keyNodeEntryOrRaw instanceof AVLTreeMultiMapNode;
116
+ isNode(keyNodeOrEntry) {
117
+ return keyNodeOrEntry instanceof AVLTreeCounterNode;
97
118
  }
98
119
  /**
99
120
  * Time Complexity: O(log n)
@@ -101,9 +122,9 @@ export class AVLTreeMultiMap extends AVLTree {
101
122
  *
102
123
  * The function overrides the add method of a TypeScript class to add a new node to a data structure
103
124
  * and update the count.
104
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The
105
- * `keyNodeEntryOrRaw` parameter can accept a value of type `R`, which can be any type. It
106
- * can also accept a value of type `BTNRep<K, V, NODE>`, which represents a key, node,
125
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The
126
+ * `keyNodeOrEntry` parameter can accept a value of type `R`, which can be any type. It
127
+ * can also accept a value of type `BTNRep<K, V, AVLTreeCounterNode<K, V>>`, which represents a key, node,
107
128
  * entry, or raw element
108
129
  * @param {V} [value] - The `value` parameter represents the value associated with the key in the
109
130
  * data structure. It is an optional parameter, so it can be omitted if not needed.
@@ -112,8 +133,8 @@ export class AVLTreeMultiMap extends AVLTree {
112
133
  * be added once. However, you can specify a different value for `count` if you want to add
113
134
  * @returns a boolean value.
114
135
  */
115
- add(keyNodeEntryOrRaw, value, count = 1) {
116
- const [newNode, newValue] = this._keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value, count);
136
+ add(keyNodeOrEntry, value, count = 1) {
137
+ const [newNode, newValue] = this._keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value, count);
117
138
  if (newNode === undefined)
118
139
  return false;
119
140
  const orgNodeCount = newNode?.count || 0;
@@ -129,7 +150,7 @@ export class AVLTreeMultiMap extends AVLTree {
129
150
  *
130
151
  * The function overrides the delete method in a binary tree data structure, handling deletion of
131
152
  * nodes and maintaining balance in the tree.
132
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The `predicate`
153
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The `predicate`
133
154
  * parameter in the `delete` method is used to specify the condition for deleting a node from the
134
155
  * binary tree. It can be a key, node, or entry that determines which
135
156
  * node(s) should be deleted.
@@ -142,11 +163,11 @@ export class AVLTreeMultiMap extends AVLTree {
142
163
  * method returns an array of `BinaryTreeDeleteResult` objects, each containing information about the
143
164
  * deleted node and whether balancing is needed in the tree.
144
165
  */
145
- delete(keyNodeEntryOrRaw, ignoreCount = false) {
166
+ delete(keyNodeOrEntry, ignoreCount = false) {
146
167
  const deletedResult = [];
147
168
  if (!this.root)
148
169
  return deletedResult;
149
- const curr = this.getNode(keyNodeEntryOrRaw) ?? undefined;
170
+ const curr = this.getNode(keyNodeOrEntry) ?? undefined;
150
171
  if (!curr)
151
172
  return deletedResult;
152
173
  const parent = curr?.parent ? curr.parent : undefined;
@@ -282,25 +303,25 @@ export class AVLTreeMultiMap extends AVLTree {
282
303
  return cloned;
283
304
  }
284
305
  /**
285
- * The `map` function in TypeScript overrides the default behavior to create a new AVLTreeMultiMap
306
+ * The `map` function in TypeScript overrides the default behavior to create a new AVLTreeCounter
286
307
  * with modified entries based on a provided callback.
287
308
  * @param callback - The `callback` parameter is a function that will be called for each entry in the
288
- * AVLTreeMultiMap. It takes four arguments:
309
+ * AVLTreeCounter. It takes four arguments:
289
310
  * @param [options] - The `options` parameter in the `override map` function is of type
290
- * `AVLTreeMultiMapOptions<MK, MV, MR>`. This parameter allows you to provide additional
291
- * configuration options when creating a new `AVLTreeMultiMap` instance within the `map` function.
311
+ * `AVLTreeCounterOptions<MK, MV, MR>`. This parameter allows you to provide additional
312
+ * configuration options when creating a new `AVLTreeCounter` instance within the `map` function.
292
313
  * These options
293
314
  * @param {any} [thisArg] - The `thisArg` parameter in the `override map` function is used to specify
294
315
  * the value of `this` when executing the `callback` function. It allows you to set the context
295
316
  * (value of `this`) for the callback function. This can be useful when you want to access properties
296
317
  * or
297
- * @returns The `map` method is returning a new `AVLTreeMultiMap` instance with the entries
318
+ * @returns The `map` method is returning a new `AVLTreeCounter` instance with the entries
298
319
  * transformed by the provided `callback` function. Each entry in the original tree is passed to the
299
320
  * `callback` function along with the index and the original tree itself. The transformed entries are
300
- * then added to the new `AVLTreeMultiMap` instance, which is returned at the end.
321
+ * then added to the new `AVLTreeCounter` instance, which is returned at the end.
301
322
  */
302
323
  map(callback, options, thisArg) {
303
- const newTree = new AVLTreeMultiMap([], options);
324
+ const newTree = new AVLTreeCounter([], options);
304
325
  let index = 0;
305
326
  for (const [key, value] of this) {
306
327
  newTree.add(callback.call(thisArg, key, value, index++, this));
@@ -310,36 +331,28 @@ export class AVLTreeMultiMap extends AVLTree {
310
331
  /**
311
332
  * The function `keyValueNodeEntryRawToNodeAndValue` converts a key, value, entry, or raw element into
312
333
  * a node object.
313
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The
314
- * `keyNodeEntryOrRaw` parameter can be of type `R` or `BTNRep<K, V, NODE>`.
334
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The
335
+ * `keyNodeOrEntry` parameter can be of type `R` or `BTNRep<K, V, AVLTreeCounterNode<K, V>>`.
315
336
  * @param {V} [value] - The `value` parameter is an optional value that can be passed to the
316
337
  * `override` function. It represents the value associated with the key in the data structure. If no
317
338
  * value is provided, it will default to `undefined`.
318
339
  * @param [count=1] - The `count` parameter is an optional parameter that specifies the number of
319
340
  * times the key-value pair should be added to the data structure. If not provided, it defaults to 1.
320
- * @returns either a NODE object or undefined.
341
+ * @returns either a AVLTreeCounterNode<K, V> object or undefined.
321
342
  */
322
- _keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value, count = 1) {
323
- if (keyNodeEntryOrRaw === undefined || keyNodeEntryOrRaw === null)
343
+ _keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value, count = 1) {
344
+ if (keyNodeOrEntry === undefined || keyNodeOrEntry === null)
324
345
  return [undefined, undefined];
325
- if (this.isNode(keyNodeEntryOrRaw))
326
- return [keyNodeEntryOrRaw, value];
327
- if (this.isEntry(keyNodeEntryOrRaw)) {
328
- const [key, entryValue] = keyNodeEntryOrRaw;
346
+ if (this.isNode(keyNodeOrEntry))
347
+ return [keyNodeOrEntry, value];
348
+ if (this.isEntry(keyNodeOrEntry)) {
349
+ const [key, entryValue] = keyNodeOrEntry;
329
350
  if (key === undefined || key === null)
330
351
  return [undefined, undefined];
331
352
  const finalValue = value ?? entryValue;
332
353
  return [this.createNode(key, finalValue, count), finalValue];
333
354
  }
334
- if (this.isRaw(keyNodeEntryOrRaw)) {
335
- const [key, entryValue] = this._toEntryFn(keyNodeEntryOrRaw);
336
- const finalValue = value ?? entryValue;
337
- if (this.isKey(key))
338
- return [this.createNode(key, finalValue, count), finalValue];
339
- }
340
- if (this.isKey(keyNodeEntryOrRaw))
341
- return [this.createNode(keyNodeEntryOrRaw, value, count), value];
342
- return [undefined, undefined];
355
+ return [this.createNode(keyNodeOrEntry, value, count), value];
343
356
  }
344
357
  /**
345
358
  * Time Complexity: O(1)
@@ -347,9 +360,9 @@ export class AVLTreeMultiMap extends AVLTree {
347
360
  *
348
361
  * The `_swapProperties` function swaps the properties (key, value, count, height) between two nodes
349
362
  * in a binary search tree.
350
- * @param {R | BSTNOptKeyOrNode<K, NODE>} srcNode - The `srcNode` parameter represents the source node
363
+ * @param {BSTNOptKeyOrNode<K, AVLTreeCounterNode<K, V>>} srcNode - The `srcNode` parameter represents the source node
351
364
  * that will be swapped with the `destNode`.
352
- * @param {R | BSTNOptKeyOrNode<K, NODE>} destNode - The `destNode` parameter represents the destination
365
+ * @param {BSTNOptKeyOrNode<K, AVLTreeCounterNode<K, V>>} destNode - The `destNode` parameter represents the destination
353
366
  * node where the properties will be swapped with the source node.
354
367
  * @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
355
368
  * If either `srcNode` or `destNode` is undefined, it returns `undefined`.
@@ -382,15 +395,15 @@ export class AVLTreeMultiMap extends AVLTree {
382
395
  * Space Complexity: O(1)
383
396
  *
384
397
  * The function replaces an old node with a new node and updates the count property of the new node.
385
- * @param {NODE} oldNode - The oldNode parameter represents the node that needs to be replaced in the
386
- * data structure. It is of type NODE.
387
- * @param {NODE} newNode - The `newNode` parameter is an instance of the `NODE` class.
398
+ * @param {AVLTreeCounterNode<K, V>} oldNode - The oldNode parameter represents the node that needs to be replaced in the
399
+ * data structure. It is of type AVLTreeCounterNode<K, V>.
400
+ * @param {AVLTreeCounterNode<K, V>} newNode - The `newNode` parameter is an instance of the `AVLTreeCounterNode<K, V>` class.
388
401
  * @returns The method is returning the result of calling the `_replaceNode` method from the
389
- * superclass, which is of type `NODE`.
402
+ * superclass, which is of type `AVLTreeCounterNode<K, V>`.
390
403
  */
391
404
  _replaceNode(oldNode, newNode) {
392
405
  newNode.count = oldNode.count + newNode.count;
393
406
  return super._replaceNode(oldNode, newNode);
394
407
  }
395
408
  }
396
- //# sourceMappingURL=avl-tree-multi-map.js.map
409
+ //# sourceMappingURL=avl-tree-counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avl-tree-counter.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/avl-tree-counter.ts"],"names":[],"mappings":"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"}