data-structure-typed 1.53.9 → 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 -59
  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 -189
  9. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +133 -357
  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 +108 -78
  12. package/dist/cjs/data-structures/binary-tree/avl-tree.js +126 -79
  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 +243 -190
  18. package/dist/cjs/data-structures/binary-tree/binary-tree.js +273 -229
  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 +141 -122
  21. package/dist/cjs/data-structures/binary-tree/bst.js +170 -134
  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 +84 -80
  27. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +101 -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} +54 -56
  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 -186
  33. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +140 -388
  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 +7 -6
  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 -3
  70. package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +0 -2
  71. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +0 -2
  72. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +3 -2
  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 -3
  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 -3
  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} +72 -78
  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 +126 -80
  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 +243 -190
  94. package/dist/{mjs → esm}/data-structures/binary-tree/binary-tree.js +276 -234
  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 +141 -122
  97. package/dist/{mjs → esm}/data-structures/binary-tree/bst.js +171 -140
  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 +84 -80
  103. package/dist/{mjs → esm}/data-structures/binary-tree/red-black-tree.js +100 -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} +88 -86
  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 -2
  148. package/dist/{mjs → esm}/types/data-structures/binary-tree/bst.d.ts +3 -2
  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 +1407 -913
  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 +148 -394
  163. package/src/data-structures/binary-tree/avl-tree.ts +152 -112
  164. package/src/data-structures/binary-tree/binary-indexed-tree.ts +3 -0
  165. package/src/data-structures/binary-tree/binary-tree.ts +446 -379
  166. package/src/data-structures/binary-tree/bst.ts +224 -201
  167. package/src/data-structures/binary-tree/index.ts +2 -0
  168. package/src/data-structures/binary-tree/red-black-tree.ts +138 -114
  169. package/src/data-structures/binary-tree/tree-counter.ts +504 -0
  170. package/src/data-structures/binary-tree/tree-multi-map.ts +156 -428
  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 -11
  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 -4
  184. package/src/types/data-structures/binary-tree/avl-tree.ts +0 -3
  185. package/src/types/data-structures/binary-tree/binary-tree.ts +0 -5
  186. package/src/types/data-structures/binary-tree/bst.ts +5 -3
  187. package/src/types/data-structures/binary-tree/index.ts +2 -0
  188. package/src/types/data-structures/binary-tree/rb-tree.ts +1 -4
  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 -4
  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 -204
  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 -8
  231. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -4
  232. package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +0 -4
  233. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +0 -5
  234. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +0 -4
  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,7 +1,5 @@
1
- import { 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, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>;
5
3
  export type ToEntryFn<K, V, R> = (rawElement: R) => BTNEntry<K, V>;
6
4
  export type BinaryTreeOptions<K, V, R> = {
7
5
  iterationType?: IterationType;
@@ -1,11 +1,12 @@
1
- import { 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, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>;
3
+ import { OptValue } from '../../common';
5
4
  export type BSTOptions<K, V, R> = BinaryTreeOptions<K, V, R> & {
6
5
  specifyComparable?: (key: K) => Comparable;
7
6
  isReverse?: boolean;
8
7
  };
9
8
  export type BSTNOptKey<K> = K | undefined;
10
9
  export type OptNode<NODE> = NODE | undefined;
10
+ export type BSTNEntry<K, V> = [BSTNOptKey<K>, OptValue<V>];
11
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,5 +1,3 @@
1
- import { RedBlackTreeNode } from '../../../data-structures';
2
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, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>;
5
- export type RedBlackTreeOptions<K, V, R> = Omit<BSTOptions<K, V, R>, 'isReverse'> & {};
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,4 +1,2 @@
1
- import { 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, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>;
4
- 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,33 +14,38 @@ export class AVLTreeMultiMapNode extends AVLTreeNode {
14
14
  super(key, value);
15
15
  this.count = count;
16
16
  }
17
- _count = 1;
18
- /**
19
- * The function returns the value of the protected variable _count.
20
- * @returns The count property of the object, which is of type number.
21
- */
22
- get count() {
23
- return this._count;
17
+ parent = undefined;
18
+ _left = undefined;
19
+ get left() {
20
+ return this._left;
24
21
  }
25
- /**
26
- * The above function sets the value of the count property.
27
- * @param {number} value - The value parameter is of type number, which means it can accept any
28
- * numeric value.
29
- */
30
- set count(value) {
31
- this._count = value;
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;
32
37
  }
33
38
  }
34
39
  /**
35
- * 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.
36
41
  */
37
- export class AVLTreeMultiMap extends AVLTree {
42
+ export class AVLTreeCounter extends AVLTree {
38
43
  /**
39
- * The constructor initializes a new AVLTreeMultiMap object with optional initial elements.
44
+ * The constructor initializes a new AVLTreeCounter object with optional initial elements.
40
45
  * @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter is an
41
46
  * iterable object that can contain either keys, nodes, entries, or raw elements.
42
47
  * @param [options] - The `options` parameter is an optional object that can be used to customize the
43
- * 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
44
49
  * `compareValues` functions to define custom comparison logic for keys and values, respectively.
45
50
  */
46
51
  constructor(keysNodesEntriesOrRaws = [], options) {
@@ -71,29 +76,28 @@ export class AVLTreeMultiMap extends AVLTree {
71
76
  return sum;
72
77
  }
73
78
  /**
74
- * 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.
75
80
  * @param {K} key - The key parameter represents the key of the node being created. It is of type K,
76
81
  * which is a generic type that can be replaced with any specific type when using the function.
77
82
  * @param {V} [value] - The `value` parameter is an optional parameter that represents the value
78
83
  * associated with the key in the node. It is of type `V`, which can be any data type.
79
84
  * @param {number} [count] - The `count` parameter represents the number of occurrences of a
80
- * 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
81
86
  * calling the `createNode` method. If provided, it specifies the initial count for the node.
82
- * @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>.
83
88
  */
84
89
  createNode(key, value, count) {
85
- return new AVLTreeMultiMapNode(key, this._isMapMode ? undefined : value, count);
90
+ return new AVLTreeCounterNode(key, this._isMapMode ? undefined : value, count);
86
91
  }
87
92
  /**
88
- * 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.
89
94
  * @param [options] - The `options` parameter is an optional object that contains additional
90
- * configuration options for creating the AVLTreeMultiMap. It can have the following properties:
91
- * @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
92
97
  * object.
93
98
  */
94
- // @ts-ignore
95
99
  createTree(options) {
96
- return new AVLTreeMultiMap([], {
100
+ return new AVLTreeCounter([], {
97
101
  iterationType: this.iterationType,
98
102
  isMapMode: this._isMapMode,
99
103
  specifyComparable: this._specifyComparable,
@@ -103,14 +107,14 @@ export class AVLTreeMultiMap extends AVLTree {
103
107
  });
104
108
  }
105
109
  /**
106
- * The function checks if the input is an instance of AVLTreeMultiMapNode.
107
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
108
- * `keyNodeEntryOrRaw` can be of type `R` or `BTNRep<K, V, NODE>`.
109
- * @returns a boolean value indicating whether the input parameter `keyNodeEntryOrRaw` is
110
- * 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.
111
115
  */
112
- isNode(keyNodeEntryOrRaw) {
113
- return keyNodeEntryOrRaw instanceof AVLTreeMultiMapNode;
116
+ isNode(keyNodeOrEntry) {
117
+ return keyNodeOrEntry instanceof AVLTreeCounterNode;
114
118
  }
115
119
  /**
116
120
  * Time Complexity: O(log n)
@@ -118,9 +122,9 @@ export class AVLTreeMultiMap extends AVLTree {
118
122
  *
119
123
  * The function overrides the add method of a TypeScript class to add a new node to a data structure
120
124
  * and update the count.
121
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The
122
- * `keyNodeEntryOrRaw` parameter can accept a value of type `R`, which can be any type. It
123
- * 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,
124
128
  * entry, or raw element
125
129
  * @param {V} [value] - The `value` parameter represents the value associated with the key in the
126
130
  * data structure. It is an optional parameter, so it can be omitted if not needed.
@@ -129,8 +133,8 @@ export class AVLTreeMultiMap extends AVLTree {
129
133
  * be added once. However, you can specify a different value for `count` if you want to add
130
134
  * @returns a boolean value.
131
135
  */
132
- add(keyNodeEntryOrRaw, value, count = 1) {
133
- const [newNode, newValue] = this._keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value, count);
136
+ add(keyNodeOrEntry, value, count = 1) {
137
+ const [newNode, newValue] = this._keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value, count);
134
138
  if (newNode === undefined)
135
139
  return false;
136
140
  const orgNodeCount = newNode?.count || 0;
@@ -146,7 +150,7 @@ export class AVLTreeMultiMap extends AVLTree {
146
150
  *
147
151
  * The function overrides the delete method in a binary tree data structure, handling deletion of
148
152
  * nodes and maintaining balance in the tree.
149
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The `predicate`
153
+ * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>>} keyNodeOrEntry - The `predicate`
150
154
  * parameter in the `delete` method is used to specify the condition for deleting a node from the
151
155
  * binary tree. It can be a key, node, or entry that determines which
152
156
  * node(s) should be deleted.
@@ -159,11 +163,11 @@ export class AVLTreeMultiMap extends AVLTree {
159
163
  * method returns an array of `BinaryTreeDeleteResult` objects, each containing information about the
160
164
  * deleted node and whether balancing is needed in the tree.
161
165
  */
162
- delete(keyNodeEntryOrRaw, ignoreCount = false) {
166
+ delete(keyNodeOrEntry, ignoreCount = false) {
163
167
  const deletedResult = [];
164
168
  if (!this.root)
165
169
  return deletedResult;
166
- const curr = this.getNode(keyNodeEntryOrRaw) ?? undefined;
170
+ const curr = this.getNode(keyNodeOrEntry) ?? undefined;
167
171
  if (!curr)
168
172
  return deletedResult;
169
173
  const parent = curr?.parent ? curr.parent : undefined;
@@ -175,7 +179,7 @@ export class AVLTreeMultiMap extends AVLTree {
175
179
  else {
176
180
  if (!curr.left) {
177
181
  if (!parent) {
178
- if (curr.right !== undefined)
182
+ if (curr.right !== undefined && curr.right !== null)
179
183
  this._setRoot(curr.right);
180
184
  }
181
185
  else {
@@ -288,7 +292,6 @@ export class AVLTreeMultiMap extends AVLTree {
288
292
  * The function overrides the clone method to create a deep copy of a tree object.
289
293
  * @returns The `clone()` method is returning a cloned instance of the `TREE` object.
290
294
  */
291
- // @ts-ignore
292
295
  clone() {
293
296
  const cloned = this.createTree();
294
297
  if (this._isMapMode)
@@ -300,26 +303,25 @@ export class AVLTreeMultiMap extends AVLTree {
300
303
  return cloned;
301
304
  }
302
305
  /**
303
- * 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
304
307
  * with modified entries based on a provided callback.
305
308
  * @param callback - The `callback` parameter is a function that will be called for each entry in the
306
- * AVLTreeMultiMap. It takes four arguments:
309
+ * AVLTreeCounter. It takes four arguments:
307
310
  * @param [options] - The `options` parameter in the `override map` function is of type
308
- * `AVLTreeMultiMapOptions<MK, MV, MR>`. This parameter allows you to provide additional
309
- * 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.
310
313
  * These options
311
314
  * @param {any} [thisArg] - The `thisArg` parameter in the `override map` function is used to specify
312
315
  * the value of `this` when executing the `callback` function. It allows you to set the context
313
316
  * (value of `this`) for the callback function. This can be useful when you want to access properties
314
317
  * or
315
- * @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
316
319
  * transformed by the provided `callback` function. Each entry in the original tree is passed to the
317
320
  * `callback` function along with the index and the original tree itself. The transformed entries are
318
- * 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.
319
322
  */
320
- // @ts-ignore
321
323
  map(callback, options, thisArg) {
322
- const newTree = new AVLTreeMultiMap([], options);
324
+ const newTree = new AVLTreeCounter([], options);
323
325
  let index = 0;
324
326
  for (const [key, value] of this) {
325
327
  newTree.add(callback.call(thisArg, key, value, index++, this));
@@ -329,36 +331,28 @@ export class AVLTreeMultiMap extends AVLTree {
329
331
  /**
330
332
  * The function `keyValueNodeEntryRawToNodeAndValue` converts a key, value, entry, or raw element into
331
333
  * a node object.
332
- * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The
333
- * `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>>`.
334
336
  * @param {V} [value] - The `value` parameter is an optional value that can be passed to the
335
337
  * `override` function. It represents the value associated with the key in the data structure. If no
336
338
  * value is provided, it will default to `undefined`.
337
339
  * @param [count=1] - The `count` parameter is an optional parameter that specifies the number of
338
340
  * times the key-value pair should be added to the data structure. If not provided, it defaults to 1.
339
- * @returns either a NODE object or undefined.
341
+ * @returns either a AVLTreeCounterNode<K, V> object or undefined.
340
342
  */
341
- _keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value, count = 1) {
342
- if (keyNodeEntryOrRaw === undefined || keyNodeEntryOrRaw === null)
343
+ _keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value, count = 1) {
344
+ if (keyNodeOrEntry === undefined || keyNodeOrEntry === null)
343
345
  return [undefined, undefined];
344
- if (this.isNode(keyNodeEntryOrRaw))
345
- return [keyNodeEntryOrRaw, value];
346
- if (this.isEntry(keyNodeEntryOrRaw)) {
347
- const [key, entryValue] = keyNodeEntryOrRaw;
346
+ if (this.isNode(keyNodeOrEntry))
347
+ return [keyNodeOrEntry, value];
348
+ if (this.isEntry(keyNodeOrEntry)) {
349
+ const [key, entryValue] = keyNodeOrEntry;
348
350
  if (key === undefined || key === null)
349
351
  return [undefined, undefined];
350
352
  const finalValue = value ?? entryValue;
351
353
  return [this.createNode(key, finalValue, count), finalValue];
352
354
  }
353
- if (this.isRaw(keyNodeEntryOrRaw)) {
354
- const [key, entryValue] = this._toEntryFn(keyNodeEntryOrRaw);
355
- const finalValue = value ?? entryValue;
356
- if (this.isKey(key))
357
- return [this.createNode(key, finalValue, count), finalValue];
358
- }
359
- if (this.isKey(keyNodeEntryOrRaw))
360
- return [this.createNode(keyNodeEntryOrRaw, value, count), value];
361
- return [undefined, undefined];
355
+ return [this.createNode(keyNodeOrEntry, value, count), value];
362
356
  }
363
357
  /**
364
358
  * Time Complexity: O(1)
@@ -366,9 +360,9 @@ export class AVLTreeMultiMap extends AVLTree {
366
360
  *
367
361
  * The `_swapProperties` function swaps the properties (key, value, count, height) between two nodes
368
362
  * in a binary search tree.
369
- * @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
370
364
  * that will be swapped with the `destNode`.
371
- * @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
372
366
  * node where the properties will be swapped with the source node.
373
367
  * @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
374
368
  * If either `srcNode` or `destNode` is undefined, it returns `undefined`.
@@ -401,15 +395,15 @@ export class AVLTreeMultiMap extends AVLTree {
401
395
  * Space Complexity: O(1)
402
396
  *
403
397
  * The function replaces an old node with a new node and updates the count property of the new node.
404
- * @param {NODE} oldNode - The oldNode parameter represents the node that needs to be replaced in the
405
- * data structure. It is of type NODE.
406
- * @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.
407
401
  * @returns The method is returning the result of calling the `_replaceNode` method from the
408
- * superclass, which is of type `NODE`.
402
+ * superclass, which is of type `AVLTreeCounterNode<K, V>`.
409
403
  */
410
404
  _replaceNode(oldNode, newNode) {
411
405
  newNode.count = oldNode.count + newNode.count;
412
406
  return super._replaceNode(oldNode, newNode);
413
407
  }
414
408
  }
415
- //# 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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"}