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
@@ -90,10 +90,10 @@ describe('BinaryTreeNode', () => {
90
90
 
91
91
  describe('BinaryTree addMany', () => {
92
92
  it('should addMany', () => {
93
- const tree = new BinaryTree<number, number, { id: number; name: number }>([], {
93
+ const binTree = new BinaryTree<number, number, { id: number; name: number }>([], {
94
94
  toEntryFn: ({ id, name }) => [id, name]
95
95
  });
96
- tree.addMany(
96
+ binTree.addMany(
97
97
  [
98
98
  { id: 1, name: 1 },
99
99
  { id: 2, name: 2 },
@@ -102,10 +102,10 @@ describe('BinaryTree addMany', () => {
102
102
  ],
103
103
  [undefined, 22, 44, 33]
104
104
  );
105
- expect(tree.get(2)).toBe(22);
106
- expect(tree.get(tree.getNode(3))).toBe(33);
107
- expect(tree.get(tree.getNode(4))).toBe(44);
108
- expect(tree.get(tree.getNode(1))).toBe(1);
105
+ expect(binTree.get(2)).toBe(22);
106
+ expect(binTree.get(binTree.getNode(3))).toBe(33);
107
+ expect(binTree.get(binTree.getNode(4))).toBe(44);
108
+ expect(binTree.get(binTree.getNode(1))).toBe(1);
109
109
  });
110
110
 
111
111
  it('should addMany undefined and null', () => {
@@ -123,7 +123,9 @@ describe('BinaryTree addMany', () => {
123
123
  ]);
124
124
  expect(addManyEntriesWithNull).toEqual([true, true, true, true]);
125
125
  expect(binaryTree.get(null)).toBe(undefined);
126
- expect(binaryTree.getNode(null)).toBe(null);
126
+ expect(binaryTree.getNode(null)).toBe(undefined);
127
+ // // TODO should be null instead of undefined
128
+ // expect(binaryTree.getNode(null)).toBe(null);
127
129
  const node0 = binaryTree.add(0, '0');
128
130
  expect(node0).toBe(true);
129
131
  expect(binaryTree.get(0)).toBe('0');
@@ -131,83 +133,83 @@ describe('BinaryTree addMany', () => {
131
133
  });
132
134
 
133
135
  describe('BinaryTree', () => {
134
- let tree: BinaryTree<number>;
136
+ let binTree: BinaryTree<number>;
135
137
 
136
138
  beforeEach(() => {
137
- tree = new BinaryTree<number>();
139
+ binTree = new BinaryTree<number>();
138
140
  });
139
141
 
140
142
  afterEach(() => {
141
- tree.clear();
143
+ binTree.clear();
142
144
  });
143
145
 
144
146
  it('should add a node', () => {
145
- const node = tree.add(1);
147
+ const node = binTree.add(1);
146
148
  expect(node).not.toBeNull();
147
- expect(tree.size).toBe(1);
149
+ expect(binTree.size).toBe(1);
148
150
  });
149
151
 
150
152
  it('should delete nodes', () => {
151
- expect(tree.getHeight(tree.root, 'ITERATIVE')).toBe(-1);
152
- expect(tree.getMinHeight()).toBe(-1);
153
- const node1 = tree.createNode(1);
154
- tree.add(node1);
155
- expect(tree.size).toBe(1);
153
+ expect(binTree.getHeight(binTree.root, 'ITERATIVE')).toBe(-1);
154
+ expect(binTree.getMinHeight()).toBe(-1);
155
+ const node1 = binTree.createNode(1);
156
+ binTree.add(node1);
157
+ expect(binTree.size).toBe(1);
156
158
 
157
159
  const leftChild = new BinaryTreeNode<number>(2);
158
160
  const rightChild = new BinaryTreeNode<number>(3);
159
- tree.add(leftChild);
160
- tree.add(rightChild);
161
- const root = tree.root;
161
+ binTree.add(leftChild);
162
+ binTree.add(rightChild);
163
+ const root = binTree.root;
162
164
 
163
165
  expect(leftChild.familyPosition).toBe('LEFT');
164
- tree.add(null);
165
- tree.add(new BinaryTreeNode<number>(4));
166
+ binTree.add(null);
167
+ binTree.add(new BinaryTreeNode<number>(4));
166
168
  expect(rightChild.familyPosition).toBe('RIGHT');
167
169
  expect(root?.familyPosition).toBe('ROOT');
168
170
  expect(leftChild.familyPosition).toBe('ROOT_LEFT');
169
- tree.add(new BinaryTreeNode<number>(5));
171
+ binTree.add(new BinaryTreeNode<number>(5));
170
172
  expect(rightChild.familyPosition).toBe('ROOT_RIGHT');
171
173
 
172
- tree.delete(new BinaryTreeNode<number>(200));
173
- tree.delete(rightChild);
174
+ binTree.delete(new BinaryTreeNode<number>(200));
175
+ binTree.delete(rightChild);
174
176
 
175
177
  if (node1) {
176
- const result = tree.delete(node1);
178
+ const result = binTree.delete(node1);
177
179
  expect(result).toHaveLength(1);
178
- expect(tree.size).toBe(4);
179
- expect(tree.getMinHeight(tree.root, 'RECURSIVE')).toBe(1);
180
+ expect(binTree.size).toBe(4);
181
+ expect(binTree.getMinHeight(binTree.root, 'RECURSIVE')).toBe(1);
180
182
  }
181
183
  });
182
184
 
183
185
  it('should add and find nodes', () => {
184
- tree.add([1, 1]);
185
- tree.add(undefined);
186
- tree.add([2, 2]);
187
- tree.add([3, 3]);
186
+ binTree.add([1, 1]);
187
+ binTree.add(undefined);
188
+ binTree.add([2, 2]);
189
+ binTree.add([3, 3]);
188
190
 
189
- expect(tree.has(1)).toBe(true);
190
- expect(tree.has(2)).toBe(true);
191
- expect(tree.has(3)).toBe(true);
192
- expect(tree.has(4)).toBe(false);
193
- const node4 = tree.getNode(4);
194
- expect(tree.has(node4)).toBe(false);
195
- expect(tree.has(node => node === node4)).toBe(false);
196
- expect(tree.has(node => node.key?.toString() === '3')).toBe(true);
191
+ expect(binTree.has(1)).toBe(true);
192
+ expect(binTree.has(2)).toBe(true);
193
+ expect(binTree.has(3)).toBe(true);
194
+ expect(binTree.has(4)).toBe(false);
195
+ const node4 = binTree.getNode(4);
196
+ expect(binTree.has(node4)).toBe(false);
197
+ expect(binTree.has(node => node === node4)).toBe(false);
198
+ expect(binTree.has(node => node.key?.toString() === '3')).toBe(true);
197
199
  });
198
200
 
199
201
  it('should the clone method work fine', () => {
200
- expect(tree.isEmpty()).toBe(true);
201
- tree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
202
- expect(tree.root?.key).toBe(4);
203
- expect(tree.root?.left?.key).toBe(2);
204
- expect(tree.root?.left?.left).toBe(null);
205
- expect(tree.root?.left?.right?.key).toBe(1);
206
- expect(tree.root?.right?.key).toBe(6);
207
- expect(tree.root?.right?.left?.key).toBe(3);
208
- expect(tree.root?.right?.right).toBe(null);
209
-
210
- const cloned = tree.clone();
202
+ expect(binTree.isEmpty()).toBe(true);
203
+ binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
204
+ expect(binTree.root?.key).toBe(4);
205
+ expect(binTree.root?.left?.key).toBe(2);
206
+ expect(binTree.root?.left?.left).toBe(null);
207
+ expect(binTree.root?.left?.right?.key).toBe(1);
208
+ expect(binTree.root?.right?.key).toBe(6);
209
+ expect(binTree.root?.right?.left?.key).toBe(3);
210
+ expect(binTree.root?.right?.right).toBe(null);
211
+
212
+ const cloned = binTree.clone();
211
213
  expect(cloned.root?.key).toBe(4);
212
214
  expect(cloned.root?.left?.key).toBe(2);
213
215
  expect(cloned.root?.left?.left).toBe(null);
@@ -244,66 +246,66 @@ describe('BinaryTree', () => {
244
246
  // cloned.delete(null);
245
247
  // cloned.delete(null);
246
248
  // cloned.delete(null);
247
- expect(tree.size).toBe(10);
249
+ expect(binTree.size).toBe(10);
248
250
  expect(cloned.size).toBe(3);
249
251
  // expect(cloned.size).toBe(0);
250
252
  // expect(cloned.isEmpty()).toBe(true);
251
253
  });
252
254
 
253
- it('should be a balance tree after malicious manipulation', () => {
254
- tree.add(3);
255
- tree.add(12);
256
- tree.addMany(getRandomIntArray(100, 1, 100));
257
- tree.add(10);
255
+ it('should be a balance binTree after malicious manipulation', () => {
256
+ binTree.add(3);
257
+ binTree.add(12);
258
+ binTree.addMany(getRandomIntArray(100, 1, 100));
259
+ binTree.add(10);
258
260
 
259
- expect(tree.isPerfectlyBalanced()).toBe(true);
260
- const node3 = tree.getNode(3);
261
+ expect(binTree.isPerfectlyBalanced()).toBe(true);
262
+ const node3 = binTree.getNode(3);
261
263
 
262
- if (node3) node3.right = tree.createNode(1);
263
- expect(tree.isPerfectlyBalanced()).toBe(false);
264
+ if (node3) node3.right = binTree.createNode(1);
265
+ expect(binTree.isPerfectlyBalanced()).toBe(false);
264
266
 
265
- tree.clear();
266
- tree.addMany([1, null, 2, null, 3, null, 4, null, 5, null, 6, null]);
267
- expect(tree.isPerfectlyBalanced()).toBe(false);
267
+ binTree.clear();
268
+ binTree.addMany([1, null, 2, null, 3, null, 4, null, 5, null, 6, null]);
269
+ expect(binTree.isPerfectlyBalanced()).toBe(false);
268
270
  });
269
271
 
270
272
  it('should getDepth return correct depth', () => {
271
- tree.add(1);
272
- expect(tree.getDepth(1)).toBe(0);
273
- tree.add(2);
274
- expect(tree.getDepth(2)).toBe(1);
275
- tree.add(3);
276
- expect(tree.getDepth(3, 1)).toBe(1);
277
- tree.add(4);
278
- expect(tree.getDepth(4, 1)).toBe(2);
279
- expect(tree.getDepth(4)).toBe(2);
280
- expect(tree.getDepth(4, 2)).toBe(1);
273
+ binTree.add(1);
274
+ expect(binTree.getDepth(1)).toBe(0);
275
+ binTree.add(2);
276
+ expect(binTree.getDepth(2)).toBe(1);
277
+ binTree.add(3);
278
+ expect(binTree.getDepth(3, 1)).toBe(1);
279
+ binTree.add(4);
280
+ expect(binTree.getDepth(4, 1)).toBe(2);
281
+ expect(binTree.getDepth(4)).toBe(2);
282
+ expect(binTree.getDepth(4, 2)).toBe(1);
281
283
  });
282
284
 
283
285
  it('should traverse in-order', () => {
284
- tree.add(null);
285
- tree.delete(1);
286
- expect(tree.getHeight()).toBe(-1);
287
- tree.add(4);
288
- tree.add(2);
289
- expect(tree.getHeight()).toBe(1);
290
- tree.iterationType = 'RECURSIVE';
291
- expect(tree.getHeight()).toBe(1);
292
- tree.iterationType = 'ITERATIVE';
293
-
294
- tree.add(6);
295
- tree.add(1);
296
- tree.add(new BinaryTreeNode(3));
297
- tree.add(5);
298
- tree.add(7);
299
-
300
- const inOrder = tree.dfs(node => node.key);
286
+ binTree.add(null);
287
+ binTree.delete(1);
288
+ expect(binTree.getHeight()).toBe(-1);
289
+ binTree.add(4);
290
+ binTree.add(2);
291
+ expect(binTree.getHeight()).toBe(1);
292
+ binTree.iterationType = 'RECURSIVE';
293
+ expect(binTree.getHeight()).toBe(1);
294
+ binTree.iterationType = 'ITERATIVE';
295
+
296
+ binTree.add(6);
297
+ binTree.add(1);
298
+ binTree.add(new BinaryTreeNode(3));
299
+ binTree.add(5);
300
+ binTree.add(7);
301
+
302
+ const inOrder = binTree.dfs(node => node.key);
301
303
 
302
304
  expect(inOrder).toEqual([1, 2, 3, 4, 5, 6, 7]);
303
305
  });
304
306
 
305
307
  it('should isSubtreeBST', () => {
306
- tree.addMany([
308
+ binTree.addMany([
307
309
  new BinaryTreeNode(4, 4),
308
310
  new BinaryTreeNode(2, 2),
309
311
  new BinaryTreeNode(6, 6),
@@ -314,14 +316,14 @@ describe('BinaryTree', () => {
314
316
  new BinaryTreeNode(4, 4)
315
317
  ]);
316
318
 
317
- expect(tree.isBST(tree.getNode(4), 'RECURSIVE')).toBe(true);
318
- expect(tree.isBST(tree.getNode(4), 'ITERATIVE')).toBe(true);
319
+ expect(binTree.isBST(binTree.getNode(4), 'RECURSIVE')).toBe(true);
320
+ expect(binTree.isBST(binTree.getNode(4), 'ITERATIVE')).toBe(true);
319
321
  });
320
322
 
321
323
  it('should isSubtreeBST', () => {
322
- expect(tree.toVisual()).toBe('');
323
- tree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
324
- expect(tree.toVisual()).toBe(
324
+ expect(binTree.toVisual()).toBe('');
325
+ binTree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
326
+ expect(binTree.toVisual()).toBe(
325
327
  'N for null\n' +
326
328
  ' ___4___ \n' +
327
329
  ' / \\ \n' +
@@ -330,7 +332,11 @@ describe('BinaryTree', () => {
330
332
  ' 1 3 5 7 \n' +
331
333
  ' \n'
332
334
  );
333
- const visualized = tree.toVisual(undefined, { isShowUndefined: true, isShowNull: true, isShowRedBlackNIL: true });
335
+ const visualized = binTree.toVisual(undefined, {
336
+ isShowUndefined: true,
337
+ isShowNull: true,
338
+ isShowRedBlackNIL: true
339
+ });
334
340
  expect(visualized).toBe(
335
341
  'U for undefined\n' +
336
342
  'N for null\n' +
@@ -345,97 +351,97 @@ describe('BinaryTree', () => {
345
351
  ' \n'
346
352
  );
347
353
 
348
- expect(tree.isBST(tree.getNode(4), 'RECURSIVE')).toBe(true);
349
- expect(tree.isBST(tree.getNode(4), 'ITERATIVE')).toBe(true);
350
- expect(tree.getNodes(2, false, null)).toEqual([]);
351
- expect(tree.getNodes(undefined)).toEqual([]);
352
- expect(tree.getNodes(tree.getNode(2), false, tree.root)).toEqual([tree.getNode(2)]);
354
+ expect(binTree.isBST(binTree.getNode(4), 'RECURSIVE')).toBe(true);
355
+ expect(binTree.isBST(binTree.getNode(4), 'ITERATIVE')).toBe(true);
356
+ expect(binTree.getNodes(2, false, null)).toEqual([]);
357
+ expect(binTree.getNodes(undefined)).toEqual([]);
358
+ expect(binTree.getNodes(binTree.getNode(2), false, binTree.root)).toEqual([binTree.getNode(2)]);
353
359
  });
354
360
 
355
- describe('should isKey', () => {
361
+ describe('should isValidKey', () => {
356
362
  describe('primitive types', () => {
357
363
  it('numbers should be a key', () => {
358
- expect(tree.isKey(42)).toBe(true);
359
- expect(tree.isKey(0)).toBe(true);
360
- expect(tree.isKey(-1)).toBe(true);
361
- expect(tree.isKey(Infinity)).toBe(true);
362
- expect(tree.isKey(-Infinity)).toBe(true);
364
+ expect(binTree.isValidKey(42)).toBe(true);
365
+ expect(binTree.isValidKey(0)).toBe(true);
366
+ expect(binTree.isValidKey(-1)).toBe(true);
367
+ expect(binTree.isValidKey(Infinity)).toBe(true);
368
+ expect(binTree.isValidKey(-Infinity)).toBe(true);
363
369
  });
364
370
 
365
371
  // it('NaN should not be a key', () => {
366
- // expect(tree.isKey(NaN)).toBe(false);
372
+ // expect(binTree.isValidKey(NaN)).toBe(false);
367
373
  // });
368
374
 
369
375
  it('strings should be a key', () => {
370
- expect(tree.isKey('hello')).toBe(true);
371
- expect(tree.isKey('')).toBe(true);
372
- expect(tree.isKey('123')).toBe(true);
376
+ expect(binTree.isValidKey('hello')).toBe(true);
377
+ expect(binTree.isValidKey('')).toBe(true);
378
+ expect(binTree.isValidKey('123')).toBe(true);
373
379
  });
374
380
 
375
381
  it('BigInt should be a key', () => {
376
- expect(tree.isKey(BigInt(42))).toBe(true);
377
- expect(tree.isKey(BigInt(0))).toBe(true);
378
- expect(tree.isKey(BigInt(-1))).toBe(true);
382
+ expect(binTree.isValidKey(BigInt(42))).toBe(true);
383
+ expect(binTree.isValidKey(BigInt(0))).toBe(true);
384
+ expect(binTree.isValidKey(BigInt(-1))).toBe(true);
379
385
  });
380
386
 
381
387
  it('boolean should not be a key', () => {
382
- expect(tree.isKey(true)).toBe(true);
383
- expect(tree.isKey(false)).toBe(true);
388
+ expect(binTree.isValidKey(true)).toBe(true);
389
+ expect(binTree.isValidKey(false)).toBe(true);
384
390
  });
385
391
 
386
392
  it('null and undefined should not be a key', () => {
387
- expect(tree.isKey(null)).toBe(true);
388
- expect(tree.isKey(undefined)).toBe(false);
393
+ expect(binTree.isValidKey(null)).toBe(true);
394
+ expect(binTree.isValidKey(undefined)).toBe(false);
389
395
  });
390
396
 
391
397
  it('symbols should not be a key', () => {
392
- expect(tree.isKey(Symbol('test'))).toBe(false);
393
- expect(tree.isKey(Symbol.for('test'))).toBe(false);
398
+ expect(binTree.isValidKey(Symbol('test'))).toBe(false);
399
+ expect(binTree.isValidKey(Symbol.for('test'))).toBe(false);
394
400
  });
395
401
  });
396
402
 
397
403
  describe('Date objects', () => {
398
404
  it('valid Date objects should be a key', () => {
399
- expect(tree.isKey(new Date())).toBe(true);
400
- expect(tree.isKey(new Date('2024-01-01'))).toBe(true);
405
+ expect(binTree.isValidKey(new Date())).toBe(true);
406
+ expect(binTree.isValidKey(new Date('2024-01-01'))).toBe(true);
401
407
  });
402
408
 
403
409
  // it('invalid Date objects should not be a key', () => {
404
- // expect(tree.isKey(new Date('invalid'))).toBe(false);
410
+ // expect(binTree.isValidKey(new Date('invalid'))).toBe(false);
405
411
  // });
406
412
  });
407
413
 
408
414
  describe('arrays', () => {
409
415
  it('arrays should be a key as they convert to string', () => {
410
- expect(tree.isKey([])).toBe(true);
411
- expect(tree.isKey([1, 2, 3])).toBe(true);
412
- expect(tree.isKey(['a', 'b', 'c'])).toBe(true);
416
+ expect(binTree.isValidKey([])).toBe(true);
417
+ expect(binTree.isValidKey([1, 2, 3])).toBe(true);
418
+ expect(binTree.isValidKey(['a', 'b', 'c'])).toBe(true);
413
419
  });
414
420
  });
415
421
 
416
422
  describe('plain objects', () => {
417
423
  it('plain objects should not be a key', () => {
418
- expect(tree.isKey({})).toBe(false);
419
- expect(tree.isKey({ a: 1 })).toBe(false);
424
+ expect(binTree.isValidKey({})).toBe(false);
425
+ expect(binTree.isValidKey({ a: 1 })).toBe(false);
420
426
  });
421
427
  });
422
428
 
423
429
  describe('custom objects', () => {
424
430
  it('objects with numeric valueOf should be a key', () => {
425
- expect(tree.isKey({ valueOf: () => 42 })).toBe(true);
431
+ expect(binTree.isValidKey({ valueOf: () => 42 })).toBe(true);
426
432
  });
427
433
 
428
434
  it('objects with string valueOf should be a key', () => {
429
- expect(tree.isKey({ valueOf: () => 'test' })).toBe(true);
435
+ expect(binTree.isValidKey({ valueOf: () => 'test' })).toBe(true);
430
436
  });
431
437
 
432
438
  it('objects with boolean valueOf should not be a key', () => {
433
- expect(tree.isKey({ valueOf: () => true })).toBe(true);
439
+ expect(binTree.isValidKey({ valueOf: () => true })).toBe(true);
434
440
  });
435
441
 
436
442
  it('objects with nested valueOf/toString should be a key', () => {
437
443
  expect(
438
- tree.isKey({
444
+ binTree.isValidKey({
439
445
  valueOf: () => ({ toString: () => '42' })
440
446
  })
441
447
  ).toBe(true);
@@ -449,7 +455,7 @@ describe('BinaryTree', () => {
449
455
  valueOf: () => 42
450
456
  })
451
457
  };
452
- expect(tree.isKey(deeplyNested)).toBe(true);
458
+ expect(binTree.isValidKey(deeplyNested)).toBe(true);
453
459
  });
454
460
 
455
461
  it('objects with very deeply nested conversion should be a key', () => {
@@ -460,14 +466,14 @@ describe('BinaryTree', () => {
460
466
  })
461
467
  })
462
468
  };
463
- expect(tree.isKey(veryDeeplyNested)).toBe(true);
469
+ expect(binTree.isValidKey(veryDeeplyNested)).toBe(true);
464
470
  });
465
471
 
466
472
  it('objects with circular references should not be a key', () => {
467
473
  const circular: any = {
468
474
  valueOf: () => circular
469
475
  };
470
- expect(tree.isKey(circular)).toBe(false);
476
+ expect(binTree.isValidKey(circular)).toBe(false);
471
477
  });
472
478
  });
473
479
 
@@ -480,7 +486,7 @@ describe('BinaryTree', () => {
480
486
  })
481
487
  })
482
488
  };
483
- expect(tree.isKey(complexObject)).toBe(false);
489
+ expect(binTree.isValidKey(complexObject)).toBe(false);
484
490
  });
485
491
 
486
492
  it('objects returning primitive values should be handled correctly', () => {
@@ -497,40 +503,40 @@ describe('BinaryTree', () => {
497
503
  })
498
504
  })
499
505
  };
500
- expect(tree.isKey(complexObject)).toBe(true);
506
+ expect(binTree.isValidKey(complexObject)).toBe(true);
501
507
  });
502
508
  });
503
509
 
504
510
  describe('type checking', () => {
505
511
  it('should work with type guard in array methods', () => {
506
512
  const values: unknown[] = [42, 'test', true, null, undefined, new Date()];
507
- const comparableValues = values.filter(item => tree.isKey(item));
513
+ const comparableValues = values.filter(item => binTree.isValidKey(item));
508
514
  expect(comparableValues.length).toBe(5);
509
515
  });
510
516
  });
511
517
  });
512
518
 
513
519
  it('should isLeaf', () => {
514
- expect(tree.getLeftMost()).toBe(undefined);
515
- expect(tree.getRightMost()).toBe(undefined);
516
- tree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
517
- const leftMost = tree.getLeftMost();
518
- expect(tree.isLeaf(leftMost)).toBe(true);
519
- expect(tree.isLeaf(null)).toBe(true);
520
- const rightMost = tree.getRightMost();
521
- expect(tree.isLeaf(rightMost)).toBe(true);
522
- expect(tree.isLeaf(null)).toBe(true);
523
- });
524
-
525
- it('should tree traverse', () => {
526
- expect(tree.dfs()).toEqual([]);
527
- expect([...tree.values()]).toEqual([]);
528
- tree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
529
- expect(tree.dfs(node => node.key, 'PRE', undefined, 'ITERATIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
530
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', false)).toEqual([
520
+ expect(binTree.getLeftMost()).toBe(undefined);
521
+ expect(binTree.getRightMost()).toBe(undefined);
522
+ binTree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
523
+ const leftMost = binTree.getLeftMost();
524
+ expect(binTree.isLeaf(leftMost)).toBe(true);
525
+ expect(binTree.isLeaf(null)).toBe(true);
526
+ const rightMost = binTree.getRightMost();
527
+ expect(binTree.isLeaf(rightMost)).toBe(true);
528
+ expect(binTree.isLeaf(null)).toBe(true);
529
+ });
530
+
531
+ it('should binTree traverse', () => {
532
+ expect(binTree.dfs()).toEqual([]);
533
+ expect([...binTree.values()]).toEqual([]);
534
+ binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
535
+ expect(binTree.dfs(node => node.key, 'PRE', undefined, 'ITERATIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
536
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', false)).toEqual([
531
537
  4, 2, 1, 5, 6, 3, 7
532
538
  ]);
533
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', true)).toEqual([
539
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', true)).toEqual([
534
540
  4,
535
541
  2,
536
542
  null,
@@ -543,11 +549,11 @@ describe('BinaryTree', () => {
543
549
  null
544
550
  ]);
545
551
 
546
- expect(tree.dfs(node => node.key, 'PRE', undefined, 'RECURSIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
547
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', false)).toEqual([
552
+ expect(binTree.dfs(node => node.key, 'PRE', undefined, 'RECURSIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
553
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', false)).toEqual([
548
554
  4, 2, 1, 5, 6, 3, 7
549
555
  ]);
550
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', true)).toEqual([
556
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', true)).toEqual([
551
557
  4,
552
558
  2,
553
559
  null,
@@ -560,11 +566,11 @@ describe('BinaryTree', () => {
560
566
  null
561
567
  ]);
562
568
 
563
- expect(tree.dfs(node => node.key, 'IN', undefined, 'ITERATIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
564
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', false)).toEqual([
569
+ expect(binTree.dfs(node => node.key, 'IN', undefined, 'ITERATIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
570
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', false)).toEqual([
565
571
  2, 5, 1, 4, 7, 3, 6
566
572
  ]);
567
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', true)).toEqual([
573
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', true)).toEqual([
568
574
  null,
569
575
  2,
570
576
  5,
@@ -577,11 +583,11 @@ describe('BinaryTree', () => {
577
583
  null
578
584
  ]);
579
585
 
580
- expect(tree.dfs(node => node.key, 'IN', undefined, 'RECURSIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
581
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', false)).toEqual([
586
+ expect(binTree.dfs(node => node.key, 'IN', undefined, 'RECURSIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
587
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', false)).toEqual([
582
588
  2, 5, 1, 4, 7, 3, 6
583
589
  ]);
584
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', true)).toEqual([
590
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', true)).toEqual([
585
591
  null,
586
592
  2,
587
593
  5,
@@ -594,11 +600,11 @@ describe('BinaryTree', () => {
594
600
  null
595
601
  ]);
596
602
 
597
- expect(tree.dfs(node => node.key, 'POST', undefined, 'ITERATIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
598
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', false)).toEqual([
603
+ expect(binTree.dfs(node => node.key, 'POST', undefined, 'ITERATIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
604
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', false)).toEqual([
599
605
  5, 1, 2, 7, 3, 6, 4
600
606
  ]);
601
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', true)).toEqual([
607
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', true)).toEqual([
602
608
  null,
603
609
  5,
604
610
  null,
@@ -611,11 +617,11 @@ describe('BinaryTree', () => {
611
617
  4
612
618
  ]);
613
619
 
614
- expect(tree.dfs(node => node.key, 'POST', undefined, 'RECURSIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
615
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', false)).toEqual([
620
+ expect(binTree.dfs(node => node.key, 'POST', undefined, 'RECURSIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
621
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', false)).toEqual([
616
622
  5, 1, 2, 7, 3, 6, 4
617
623
  ]);
618
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', true)).toEqual([
624
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', true)).toEqual([
619
625
  null,
620
626
  5,
621
627
  null,
@@ -629,93 +635,75 @@ describe('BinaryTree', () => {
629
635
  ]);
630
636
  });
631
637
 
632
- it('should sub tree traverse', () => {
633
- tree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
634
- expect(tree.dfs(node => node.key, 'PRE', tree.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
635
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', tree.getNode(6), 'ITERATIVE', false)).toEqual([
636
- 6, 3, 7
637
- ]);
638
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', tree.getNode(6), 'ITERATIVE', true)).toEqual([
639
- 6,
640
- 3,
641
- 7,
642
- null
643
- ]);
638
+ it('should sub binTree traverse', () => {
639
+ binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
640
+ expect(binTree.dfs(node => node.key, 'PRE', binTree.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
641
+ expect(
642
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', false)
643
+ ).toEqual([6, 3, 7]);
644
+ expect(
645
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', true)
646
+ ).toEqual([6, 3, 7, null]);
644
647
 
645
- expect(tree.dfs(node => node.key, 'PRE', tree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
646
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', tree.getNode(6), 'RECURSIVE', false)).toEqual([
647
- 6, 3, 7
648
- ]);
649
- expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', tree.getNode(6), 'RECURSIVE', true)).toEqual([
650
- 6,
651
- 3,
652
- 7,
653
- null
654
- ]);
648
+ expect(binTree.dfs(node => node.key, 'PRE', binTree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
649
+ expect(
650
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', false)
651
+ ).toEqual([6, 3, 7]);
652
+ expect(
653
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', true)
654
+ ).toEqual([6, 3, 7, null]);
655
655
 
656
- expect(tree.dfs(node => node.key, 'IN', tree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
657
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', tree.getNode(6), 'ITERATIVE', false)).toEqual([
658
- 7, 3, 6
659
- ]);
660
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', tree.getNode(6), 'ITERATIVE', true)).toEqual([
661
- 7,
662
- 3,
663
- 6,
664
- null
665
- ]);
656
+ expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
657
+ expect(
658
+ binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'ITERATIVE', false)
659
+ ).toEqual([7, 3, 6]);
660
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'ITERATIVE', true)).toEqual(
661
+ [7, 3, 6, null]
662
+ );
666
663
 
667
- expect(tree.dfs(node => node.key, 'IN', tree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
668
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', tree.getNode(6), 'RECURSIVE', false)).toEqual([
669
- 7, 3, 6
670
- ]);
671
- expect(tree.dfs(node => (node !== null ? node.key : null), 'IN', tree.getNode(6), 'RECURSIVE', true)).toEqual([
672
- 7,
673
- 3,
674
- 6,
675
- null
676
- ]);
664
+ expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
665
+ expect(
666
+ binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'RECURSIVE', false)
667
+ ).toEqual([7, 3, 6]);
668
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'RECURSIVE', true)).toEqual(
669
+ [7, 3, 6, null]
670
+ );
677
671
 
678
- expect(tree.dfs(node => node.key, 'POST', tree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
679
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', tree.getNode(6), 'ITERATIVE', false)).toEqual([
680
- 7, 3, 6
681
- ]);
682
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', tree.getNode(6), 'ITERATIVE', true)).toEqual([
683
- 7,
684
- 3,
685
- null,
686
- 6
687
- ]);
672
+ expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
673
+ expect(
674
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', false)
675
+ ).toEqual([7, 3, 6]);
676
+ expect(
677
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', true)
678
+ ).toEqual([7, 3, null, 6]);
688
679
 
689
- expect(tree.dfs(node => node.key, 'POST', tree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
690
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', tree.getNode(6), 'RECURSIVE', false)).toEqual([
691
- 7, 3, 6
692
- ]);
693
- expect(tree.dfs(node => (node !== null ? node.key : null), 'POST', tree.getNode(6), 'RECURSIVE', true)).toEqual([
694
- 7,
695
- 3,
696
- null,
697
- 6
698
- ]);
680
+ expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
681
+ expect(
682
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', false)
683
+ ).toEqual([7, 3, 6]);
684
+ expect(
685
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', true)
686
+ ).toEqual([7, 3, null, 6]);
699
687
  });
700
688
 
701
- it('should clear the tree', () => {
702
- tree.add(1);
703
- tree.add(2);
689
+ it('should clear the binTree', () => {
690
+ binTree.add(1);
691
+ binTree.add(2);
704
692
 
705
- expect(tree.size).toBe(2);
693
+ expect(binTree.size).toBe(2);
706
694
 
707
- tree.clear();
695
+ binTree.clear();
708
696
 
709
- expect(tree.size).toBe(0);
710
- expect(tree.root).toBeUndefined();
697
+ expect(binTree.size).toBe(0);
698
+ expect(binTree.root).toBeUndefined();
711
699
  });
712
700
 
713
701
  it('should duplicated nodes just replace the node exists', function () {
714
- tree.clear();
715
- expect(tree.bfs()).toEqual([]);
716
- tree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
702
+ binTree.clear();
703
+ expect(binTree.bfs()).toEqual([]);
704
+ binTree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
717
705
 
718
- expect(tree.bfs(node => (node ? node.key : null), undefined, undefined, true)).toEqual([
706
+ expect(binTree.bfs(node => (node ? node.key : null), undefined, undefined, true)).toEqual([
719
707
  -10,
720
708
  9,
721
709
  20,
@@ -734,8 +722,8 @@ describe('BinaryTree', () => {
734
722
  });
735
723
 
736
724
  // it('should keyValueNodeEntryRawToNodeAndValue', () => {
737
- // const tree = new BinaryTree<number>();
738
- // const node0 = tree.keyValueNodeEntryRawToNodeAndValue(0);
725
+ // const binTree = new BinaryTree<number>();
726
+ // const node0 = binTree.keyValueNodeEntryRawToNodeAndValue(0);
739
727
  // expect(node0).toEqual([
740
728
  // {
741
729
  // _left: undefined,
@@ -747,18 +735,18 @@ describe('BinaryTree', () => {
747
735
  // undefined
748
736
  // ]);
749
737
  //
750
- // const nodeUndefined = tree.keyValueNodeEntryRawToNodeAndValue(undefined);
738
+ // const nodeUndefined = binTree.keyValueNodeEntryRawToNodeAndValue(undefined);
751
739
  // expect(nodeUndefined).toEqual([undefined, undefined]);
752
740
  //
753
- // const nodeNull = tree.keyValueNodeEntryRawToNodeAndValue(null);
741
+ // const nodeNull = binTree.keyValueNodeEntryRawToNodeAndValue(null);
754
742
  // expect(nodeNull).toEqual([null, undefined]);
755
743
  //
756
- // const [, nodeWithSeparateValue] = tree.keyValueNodeEntryRawToNodeAndValue(7, 77);
744
+ // const [, nodeWithSeparateValue] = binTree.keyValueNodeEntryRawToNodeAndValue(7, 77);
757
745
  // expect(nodeWithSeparateValue).toBe(77);
758
746
  //
759
- // expect(tree.keyValueNodeEntryRawToNodeAndValue([undefined, 2])).toEqual([undefined, undefined]);
747
+ // expect(binTree.keyValueNodeEntryRawToNodeAndValue([undefined, 2])).toEqual([undefined, undefined]);
760
748
  //
761
- // expect(tree.keyValueNodeEntryRawToNodeAndValue(Symbol('test') as unknown as number)).toEqual([
749
+ // expect(binTree.keyValueNodeEntryRawToNodeAndValue(Symbol('test') as unknown as number)).toEqual([
762
750
  // undefined,
763
751
  // undefined
764
752
  // ]);
@@ -770,14 +758,14 @@ describe('BinaryTree', () => {
770
758
  // });
771
759
 
772
760
  it('should replace value', () => {
773
- const tree = new BinaryTree<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
774
- expect(tree.get(1)).toBe('1');
775
- expect(tree.getNode(1)?.value).toBe('1');
776
- tree.add(1, 'a');
777
- expect(tree.get(1)).toBe('a');
778
- tree.add([1, 'b']);
779
- expect(tree.getNode(1)?.value).toBe('b');
780
- expect(tree.get(1)).toBe('b');
761
+ const binTree = new BinaryTree<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
762
+ expect(binTree.get(1)).toBe('1');
763
+ expect(binTree.getNode(1)?.value).toBe('1');
764
+ binTree.add(1, 'a');
765
+ expect(binTree.get(1)).toBe('a');
766
+ binTree.add([1, 'b']);
767
+ expect(binTree.getNode(1)?.value).toBe('b');
768
+ expect(binTree.get(1)).toBe('b');
781
769
  const treeMap = new BinaryTree<number>([4, 5, [1, '1'], 2, 3]);
782
770
  expect(treeMap.get(1)).toBe('1');
783
771
  expect(treeMap.getNode(1)?.value).toBe(undefined);
@@ -791,7 +779,7 @@ describe('BinaryTree', () => {
791
779
 
792
780
  describe('BinaryTree ensureNode', () => {
793
781
  it('should ensureNode with toEntryFn', () => {
794
- const tree = new BinaryTree<
782
+ const binTree = new BinaryTree<
795
783
  number,
796
784
  string,
797
785
  {
@@ -799,62 +787,62 @@ describe('BinaryTree ensureNode', () => {
799
787
  name: string;
800
788
  }
801
789
  >([], { toEntryFn: rawElement => [rawElement.id, rawElement.name] });
802
- tree.add({ id: 1, name: 'Pablo' });
803
- const node = tree.getNode(1);
804
- expect(tree.ensureNode({ id: 1, name: 'Pablo' })).toBe(node);
805
- expect(tree.ensureNode([1, 'Pablo'])).toBe(node);
806
- expect(tree.ensureNode([null, 'Pablo'])).toBe(null);
807
- expect(tree.ensureNode([undefined, 'Pablo'])).toBe(undefined);
808
- expect(tree.ensureNode(Symbol('test') as unknown as number)).toBe(undefined);
790
+ binTree.add([1, 'Pablo']);
791
+ const node = binTree.getNode(1);
792
+ // expect(binTree.ensureNode({ id: 1, name: 'Pablo' })).toBe(node);
793
+ expect(binTree.ensureNode([1, 'Pablo'])).toBe(node);
794
+ expect(binTree.ensureNode([null, 'Pablo'])).toBe(null);
795
+ expect(binTree.ensureNode([undefined, 'Pablo'])).toBe(undefined);
796
+ expect(binTree.ensureNode(Symbol('test') as unknown as number)).toBe(undefined);
809
797
  });
810
798
  });
811
799
 
812
800
  describe('BinaryTree Morris Traversal', () => {
813
- // Create a binary tree
814
- const tree = new BinaryTree<number>();
815
- tree.add(1);
816
- tree.add(2);
817
- tree.add(3);
818
- tree.add(4);
819
- tree.add(5);
801
+ // Create a binary binTree
802
+ const binTree = new BinaryTree<number>();
803
+ binTree.add(1);
804
+ binTree.add(2);
805
+ binTree.add(3);
806
+ binTree.add(4);
807
+ binTree.add(5);
820
808
  it('should perform in-order Morris traversal correctly as dfs traversal', () => {
821
809
  // Perform in-order Morris traversal
822
- const result = tree.morris(node => node.key, 'IN');
810
+ const result = binTree.morris(node => node.key, 'IN');
823
811
 
824
812
  // Expected in-order traversal result
825
813
  const expected = [4, 2, 5, 1, 3];
826
814
 
827
815
  expect(result).toEqual(expected);
828
- expect(tree.dfs(node => node.key, 'IN')).toEqual(expected);
829
- expect(tree.dfs(node => node.key, 'IN', tree.root, 'RECURSIVE')).toEqual(expected);
816
+ expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
817
+ expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
830
818
  });
831
819
 
832
820
  it('should perform pre-order Morris traversal correctly as dfs traversal', () => {
833
821
  // Perform pre-order Morris traversal
834
- const result = tree.morris(node => node.key, 'PRE');
822
+ const result = binTree.morris(node => node.key, 'PRE');
835
823
 
836
824
  // Expected pre-order traversal result
837
825
  const expected = [1, 2, 4, 5, 3];
838
826
 
839
827
  expect(result).toEqual(expected);
840
- expect(tree.dfs(node => node.key, 'PRE')).toEqual(expected);
828
+ expect(binTree.dfs(node => node.key, 'PRE')).toEqual(expected);
841
829
  });
842
830
 
843
831
  it('should perform post-order Morris traversal correctly as dfs traversal', () => {
844
832
  // Perform post-order Morris traversal
845
- const result = tree.morris(node => node.key, 'POST');
833
+ const result = binTree.morris(node => node.key, 'POST');
846
834
 
847
835
  // Expected post-order traversal result
848
836
  const expected = [4, 5, 2, 3, 1];
849
837
 
850
838
  expect(result).toEqual([4, 5, 2, 3, 1]);
851
- expect(tree.dfs(node => node.key, 'POST')).toEqual(expected);
839
+ expect(binTree.dfs(node => node.key, 'POST')).toEqual(expected);
852
840
  });
853
841
 
854
- it('after morris traversals should the structure of the tree be correct', () => {
855
- const node1 = tree.getNode(1);
856
- const node2 = tree.getNode(2);
857
- const node3 = tree.getNode(3);
842
+ it('after morris traversals should the structure of the binTree be correct', () => {
843
+ const node1 = binTree.getNode(1);
844
+ const node2 = binTree.getNode(2);
845
+ const node3 = binTree.getNode(3);
858
846
  expect(node1?.left).toBe(node2);
859
847
  expect(node1?.right).toBe(node3);
860
848
  });
@@ -875,11 +863,13 @@ describe('BinaryTree toEntryFn', () => {
875
863
  const binTree = new BinaryTree<number, number, { obj: { id: number } }>([], {
876
864
  toEntryFn: ele => [ele.obj.id, ele.obj.id]
877
865
  });
878
- binTree.add({ obj: { id: 1 } });
879
- binTree.add({ obj: { id: 2 } });
880
- binTree.add({ obj: { id: 3 } });
881
- binTree.add({ obj: { id: 4 } });
882
- binTree.add({ obj: { id: 5 } });
866
+ binTree.addMany([
867
+ { obj: { id: 1 } },
868
+ { obj: { id: 2 } },
869
+ { obj: { id: 3 } },
870
+ { obj: { id: 4 } },
871
+ { obj: { id: 5 } }
872
+ ]);
883
873
 
884
874
  const expected = [4, 2, 5, 1, 3];
885
875
 
@@ -911,21 +901,21 @@ describe('BinaryTree toEntryFn', () => {
911
901
  { obj: { id: 1 }, valueOf: () => 1 },
912
902
  { obj: { id: 3 }, valueOf: () => 3 }
913
903
  ];
914
- const tree = new BinaryTree<{ obj: { id: number }; valueOf: () => number }, number>(data);
904
+ const binTree = new BinaryTree<{ obj: { id: number }; valueOf: () => number }, number>(data);
915
905
 
916
- expect(tree.morris(node => node.key, 'IN')).toEqual(data.sort((a, b) => a.obj.id - b.obj.id));
917
- expect(tree.dfs(node => node.key, 'IN')).toEqual(data);
918
- expect(tree.dfs(node => node.key, 'IN', tree.root, 'RECURSIVE')).toEqual(data);
906
+ expect(binTree.morris(node => node.key, 'IN')).toEqual(data.sort((a, b) => a.obj.id - b.obj.id));
907
+ expect(binTree.dfs(node => node.key, 'IN')).toEqual(data);
908
+ expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(data);
919
909
  });
920
910
  });
921
911
 
922
912
  describe('BinaryTree traversals', () => {
923
913
  it('traversals', () => {
924
- const tree = new BinaryTree<number>();
914
+ const binTree = new BinaryTree<number>();
925
915
 
926
916
  const arr = [35, 20, 40, 15, 29, null, 50, null, 16, 28, 30, 45, 55];
927
- tree.refill(arr);
928
- expect(tree.bfs(node => node, tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
917
+ binTree.refill(arr);
918
+ expect(binTree.bfs(node => node, binTree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
929
919
  35,
930
920
  20,
931
921
  40,
@@ -940,7 +930,7 @@ describe('BinaryTree traversals', () => {
940
930
  45,
941
931
  55
942
932
  ]);
943
- expect(tree.bfs(node => node, tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
933
+ expect(binTree.bfs(node => node, binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
944
934
  35,
945
935
  20,
946
936
  40,
@@ -955,241 +945,233 @@ describe('BinaryTree traversals', () => {
955
945
  45,
956
946
  55
957
947
  ]);
958
- expect(tree.bfs(node => node, tree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual([
959
- 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
960
- ]);
961
- expect(tree.bfs(node => node, tree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual([
962
- 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
963
- ]);
948
+ expect(binTree.bfs(node => node, binTree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual(
949
+ [35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]
950
+ );
951
+ expect(binTree.bfs(node => node, binTree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual(
952
+ [35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]
953
+ );
964
954
 
965
- expect(tree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
966
- expect(tree.dfs(node => node.key, 'PRE', tree.root, 'RECURSIVE')).toEqual([
955
+ expect(binTree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
956
+ expect(binTree.dfs(node => node.key, 'PRE', binTree.root, 'RECURSIVE')).toEqual([
967
957
  35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
968
958
  ]);
969
959
  expect(
970
- tree.dfs(node => node, 'PRE', tree.root, 'ITERATIVE', true).map(node => (node === null ? null : node.key))
960
+ binTree.dfs(node => node, 'PRE', binTree.root, 'ITERATIVE', true).map(node => (node === null ? null : node.key))
961
+ ).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
962
+ expect(
963
+ binTree.dfs(node => node, 'PRE', binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))
971
964
  ).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
972
- expect(tree.dfs(node => node, 'PRE', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
973
- 35,
974
- 20,
975
- 15,
976
- null,
977
- 16,
978
- 29,
979
- 28,
980
- 30,
981
- 40,
982
- null,
983
- 50,
984
- 45,
985
- 55
986
- ]);
987
965
 
988
- expect(tree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
989
- expect(tree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
990
- expect(tree.dfs(node => node.key, 'POST', tree.root, 'RECURSIVE')).toEqual([
966
+ expect(binTree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
967
+ expect(binTree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
968
+ expect(binTree.dfs(node => node.key, 'POST', binTree.root, 'RECURSIVE')).toEqual([
991
969
  16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
992
970
  ]);
993
- expect(tree.bfs(node => node.key, tree.root, 'RECURSIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
994
- expect(tree.bfs(node => node.key, tree.root, 'ITERATIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
971
+ expect(binTree.bfs(node => node.key, binTree.root, 'RECURSIVE')).toEqual([
972
+ 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
973
+ ]);
974
+ expect(binTree.bfs(node => node.key, binTree.root, 'ITERATIVE')).toEqual([
975
+ 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
976
+ ]);
995
977
 
996
- expect(tree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
978
+ expect(binTree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
997
979
 
998
- expect(tree.listLevels(node => node.key, tree.root, 'RECURSIVE')).toEqual([
980
+ expect(binTree.listLevels(node => node.key, binTree.root, 'RECURSIVE')).toEqual([
999
981
  [35],
1000
982
  [20, 40],
1001
983
  [15, 29, 50],
1002
984
  [16, 28, 30, 45, 55]
1003
985
  ]);
1004
- expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'ITERATIVE', true)).toEqual([
986
+ expect(binTree.listLevels(node => (node ? node.key : null), binTree.root, 'ITERATIVE', true)).toEqual([
1005
987
  [35],
1006
988
  [20, 40],
1007
989
  [15, 29, null, 50],
1008
990
  [null, 16, 28, 30, 45, 55]
1009
991
  ]);
1010
- expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'RECURSIVE', true)).toEqual([
992
+ expect(binTree.listLevels(node => (node ? node.key : null), binTree.root, 'RECURSIVE', true)).toEqual([
1011
993
  [35],
1012
994
  [20, 40],
1013
995
  [15, 29, null, 50],
1014
996
  [null, 16, 28, 30, 45, 55]
1015
997
  ]);
1016
- tree.clear();
1017
- expect(tree.listLevels()).toEqual([]);
998
+ binTree.clear();
999
+ expect(binTree.listLevels()).toEqual([]);
1018
1000
  });
1019
1001
  });
1020
1002
 
1021
1003
  describe('BinaryTree', () => {
1022
- let tree: BinaryTree<number, string>;
1004
+ let binTree: BinaryTree<number, string>;
1023
1005
 
1024
1006
  beforeEach(() => {
1025
- tree = new BinaryTree<number, string>([], {
1007
+ binTree = new BinaryTree<number, string>([], {
1026
1008
  iterationType: 'RECURSIVE'
1027
1009
  });
1028
1010
  });
1029
1011
 
1030
1012
  afterEach(() => {
1031
- tree.clear();
1013
+ binTree.clear();
1032
1014
  });
1033
1015
 
1034
1016
  it('should create an empty BinaryTree', () => {
1035
- expect(tree.size).toBe(0);
1036
- expect(tree.isEmpty()).toBe(true);
1037
- expect(tree.root).toBe(undefined);
1017
+ expect(binTree.size).toBe(0);
1018
+ expect(binTree.isEmpty()).toBe(true);
1019
+ expect(binTree.root).toBe(undefined);
1038
1020
  });
1039
1021
 
1040
- it('should add nodes to the tree', () => {
1041
- tree.add([5, 'A']);
1042
- tree.add([3, 'B']);
1043
- tree.add([7, 'C']);
1022
+ it('should add nodes to the binTree', () => {
1023
+ binTree.add([5, 'A']);
1024
+ binTree.add([3, 'B']);
1025
+ binTree.add([7, 'C']);
1044
1026
 
1045
- expect(tree.size).toBe(3);
1046
- expect(tree.isEmpty()).toBe(false);
1047
- expect(tree.root?.key).toBe(5);
1027
+ expect(binTree.size).toBe(3);
1028
+ expect(binTree.isEmpty()).toBe(false);
1029
+ expect(binTree.root?.key).toBe(5);
1048
1030
  });
1049
1031
 
1050
1032
  it('should clear the BinaryTree', () => {
1051
- tree.add([5, 'A']);
1052
- tree.add([3, 'B']);
1053
- tree.add([7, 'C']);
1033
+ binTree.add([5, 'A']);
1034
+ binTree.add([3, 'B']);
1035
+ binTree.add([7, 'C']);
1054
1036
 
1055
- tree.clear();
1037
+ binTree.clear();
1056
1038
 
1057
- expect(tree.size).toBe(0);
1058
- expect(tree.isEmpty()).toBe(true);
1059
- expect(tree.root).toBe(undefined);
1039
+ expect(binTree.size).toBe(0);
1040
+ expect(binTree.isEmpty()).toBe(true);
1041
+ expect(binTree.root).toBe(undefined);
1060
1042
  });
1061
1043
 
1062
1044
  it('should get nodes by key', () => {
1063
- tree.add([5, 'A']);
1064
- tree.add([3, 'B']);
1065
- tree.add([7, 'C']);
1045
+ binTree.add([5, 'A']);
1046
+ binTree.add([3, 'B']);
1047
+ binTree.add([7, 'C']);
1066
1048
 
1067
- const nodeA = tree.getNode(5);
1068
- const nodeB = tree.getNode(3);
1049
+ const nodeA = binTree.getNode(5);
1050
+ const nodeB = binTree.getNode(3);
1069
1051
 
1070
1052
  expect(nodeA?.key).toBe(5);
1071
1053
  expect(nodeA?.value).toBe(undefined);
1072
1054
  expect(nodeB?.key).toBe(3);
1073
- expect(tree.get(nodeB)).toBe('B');
1055
+ expect(binTree.get(nodeB)).toBe('B');
1074
1056
  });
1075
1057
 
1076
- it('should return null when getting a non-existent node', () => {
1077
- tree.add([5, 'A']);
1058
+ it('should return undefined when getting a non-existent node', () => {
1059
+ binTree.add([5, 'A']);
1078
1060
 
1079
- const node = tree.getNode(3);
1061
+ const node = binTree.getNode(3);
1080
1062
 
1081
- expect(node).toBe(null);
1063
+ expect(node).toBe(undefined);
1082
1064
  });
1083
1065
 
1084
1066
  it('should get the depth of a node', () => {
1085
- tree.add([5, 'A']);
1086
- tree.add([3, 'B']);
1087
- tree.add([7, 'C']);
1067
+ binTree.add([5, 'A']);
1068
+ binTree.add([3, 'B']);
1069
+ binTree.add([7, 'C']);
1088
1070
 
1089
- expect(tree.getDepth(7)).toBe(1);
1090
- expect(tree.getDepth(3)).toBe(1);
1071
+ expect(binTree.getDepth(7)).toBe(1);
1072
+ expect(binTree.getDepth(3)).toBe(1);
1091
1073
  });
1092
1074
 
1093
- it('should get the height of the tree', () => {
1094
- expect(tree.getMinHeight()).toBe(-1);
1095
- tree.add([5, 'A']);
1096
- tree.add(3, 'B');
1097
- tree.add([7, 'C']);
1075
+ it('should get the height of the binTree', () => {
1076
+ expect(binTree.getMinHeight()).toBe(-1);
1077
+ binTree.add([5, 'A']);
1078
+ binTree.add(3, 'B');
1079
+ binTree.add([7, 'C']);
1098
1080
 
1099
- expect(tree.getHeight()).toBe(1);
1100
- expect(tree.getHeight(undefined, 'RECURSIVE')).toBe(1);
1101
- expect(tree.getMinHeight(undefined, 'RECURSIVE')).toBe(1);
1081
+ expect(binTree.getHeight()).toBe(1);
1082
+ expect(binTree.getHeight(undefined, 'RECURSIVE')).toBe(1);
1083
+ expect(binTree.getMinHeight(undefined, 'RECURSIVE')).toBe(1);
1102
1084
  });
1103
1085
 
1104
- it('should check if the tree is a binary search tree', () => {
1105
- tree.add([5, 'A']);
1106
- tree.add([3, 'B']);
1107
- tree.add([7, 'C']);
1086
+ it('should check if the binTree is a binary search binTree', () => {
1087
+ binTree.add([5, 'A']);
1088
+ binTree.add([3, 'B']);
1089
+ binTree.add([7, 'C']);
1108
1090
 
1109
- expect(tree.isBST()).toBe(true);
1091
+ expect(binTree.isBST()).toBe(true);
1110
1092
  });
1111
1093
 
1112
1094
  it('should perform a depth-first traversal', () => {
1113
- tree.add([5, 'A']);
1114
- tree.add([3, 'B']);
1115
- tree.add([7, 'C']);
1095
+ binTree.add([5, 'A']);
1096
+ binTree.add([3, 'B']);
1097
+ binTree.add([7, 'C']);
1116
1098
 
1117
- const result = tree.dfs();
1099
+ const result = binTree.dfs();
1118
1100
  expect(result).toEqual([3, 5, 7]);
1119
1101
  // Add assertions for the result of depth-first traversal
1120
1102
  });
1121
1103
 
1122
1104
  it('should perform a breadth-first traversal', () => {
1123
- tree.add([5, 'A']);
1124
- tree.add([3, 'B']);
1125
- tree.add([7, 'C']);
1105
+ binTree.add([5, 'A']);
1106
+ binTree.add([3, 'B']);
1107
+ binTree.add([7, 'C']);
1126
1108
 
1127
- const result = tree.bfs(node => node.key);
1109
+ const result = binTree.bfs(node => node.key);
1128
1110
  expect(result).toEqual([5, 3, 7]);
1129
1111
  // Add assertions for the result of breadth-first traversal
1130
1112
  });
1131
1113
 
1132
- it('should list levels of the tree', () => {
1133
- tree.add([5, 'A']);
1134
- tree.add([3, 'B']);
1135
- tree.add([7, 'C']);
1114
+ it('should list levels of the binTree', () => {
1115
+ binTree.add([5, 'A']);
1116
+ binTree.add([3, 'B']);
1117
+ binTree.add([7, 'C']);
1136
1118
 
1137
- const levels = tree.listLevels();
1119
+ const levels = binTree.listLevels();
1138
1120
  expect(levels).toEqual([[5], [3, 7]]);
1139
- // Add assertions for the levels of the tree
1121
+ // Add assertions for the levels of the binTree
1140
1122
  });
1141
1123
 
1142
- it('should delete nodes from the tree', () => {
1143
- tree.add([5, 'A']);
1144
- tree.add([3, 'B']);
1145
- tree.add([7, 'C']);
1124
+ it('should delete nodes from the binTree', () => {
1125
+ binTree.add([5, 'A']);
1126
+ binTree.add([3, 'B']);
1127
+ binTree.add([7, 'C']);
1146
1128
 
1147
- tree.delete(3);
1129
+ binTree.delete(3);
1148
1130
 
1149
- expect(tree.size).toBe(2);
1150
- expect(tree.getNode(3)).toBe(null);
1131
+ expect(binTree.size).toBe(2);
1132
+ expect(binTree.getNode(3)).toBe(undefined);
1151
1133
  });
1152
1134
 
1153
1135
  it('should getPathToRoot', () => {
1154
- tree.add([5, 'A']);
1155
- tree.add([3, 'B']);
1156
- tree.add([7, 'C']);
1136
+ binTree.add([5, 'A']);
1137
+ binTree.add([3, 'B']);
1138
+ binTree.add([7, 'C']);
1157
1139
 
1158
- expect(tree.getPathToRoot(7)).toEqual([7, 5]);
1159
- expect(tree.getPathToRoot(1)).toEqual([]);
1140
+ expect(binTree.getPathToRoot(7)).toEqual([7, 5]);
1141
+ expect(binTree.getPathToRoot(1)).toEqual([]);
1160
1142
  });
1161
1143
 
1162
- it('should check if the tree is perfectly balanced', () => {
1163
- tree.add([5, 'A']);
1164
- tree.add([3, 'B']);
1165
- tree.add([7, 'C']);
1144
+ it('should check if the binTree is perfectly balanced', () => {
1145
+ binTree.add([5, 'A']);
1146
+ binTree.add([3, 'B']);
1147
+ binTree.add([7, 'C']);
1166
1148
 
1167
- expect(tree.isPerfectlyBalanced()).toBe(true);
1149
+ expect(binTree.isPerfectlyBalanced()).toBe(true);
1168
1150
  });
1169
1151
 
1170
1152
  it('should get nodes by a custom callback', () => {
1171
- tree.add([5, 'E']);
1172
- tree.add([4, 'D']);
1173
- tree.add([3, 'C']);
1174
- tree.add([7, 'G']);
1175
- tree.add([null, 'null']);
1176
- tree.add([1, 'A']);
1177
- tree.add([6, 'F']);
1178
- tree.add([null, 'null']);
1179
- tree.add([2, 'B']);
1180
- tree.add([null, 'null']);
1181
-
1182
- const nodes = tree.getNodes(node => node.key === 2);
1153
+ binTree.add([5, 'E']);
1154
+ binTree.add([4, 'D']);
1155
+ binTree.add([3, 'C']);
1156
+ binTree.add([7, 'G']);
1157
+ binTree.add([null, 'null']);
1158
+ binTree.add([1, 'A']);
1159
+ binTree.add([6, 'F']);
1160
+ binTree.add([null, 'null']);
1161
+ binTree.add([2, 'B']);
1162
+ binTree.add([null, 'null']);
1163
+
1164
+ const nodes = binTree.getNodes(node => node.key === 2);
1183
1165
 
1184
1166
  expect(nodes.length).toBe(1);
1185
1167
  expect(nodes[0].key).toBe(2);
1186
1168
 
1187
- const nodesRec = tree.getNodes(node => node.key === 2, false, tree.root, 'RECURSIVE');
1169
+ const nodesRec = binTree.getNodes(node => node.key === 2, false, binTree.root, 'RECURSIVE');
1188
1170
 
1189
1171
  expect(nodesRec.length).toBe(1);
1190
1172
  expect(nodesRec[0].key).toBe(2);
1191
1173
 
1192
- const nodesItr = tree.getNodes(node => node.key === 2, false, tree.root, 'ITERATIVE');
1174
+ const nodesItr = binTree.getNodes(node => node.key === 2, false, binTree.root, 'ITERATIVE');
1193
1175
 
1194
1176
  expect(nodesItr.length).toBe(1);
1195
1177
  expect(nodesItr[0].key).toBe(2);
@@ -1198,75 +1180,75 @@ describe('BinaryTree', () => {
1198
1180
  });
1199
1181
 
1200
1182
  it('should perform Morris traversal', () => {
1201
- tree.add([5, 'A']);
1202
- tree.add([3, 'B']);
1203
- tree.add([7, 'C']);
1183
+ binTree.add([5, 'A']);
1184
+ binTree.add([3, 'B']);
1185
+ binTree.add([7, 'C']);
1204
1186
 
1205
- tree.iterationType = 'ITERATIVE';
1206
- expect([...tree]).toEqual([
1187
+ binTree.iterationType = 'ITERATIVE';
1188
+ expect([...binTree]).toEqual([
1207
1189
  [3, 'B'],
1208
1190
  [5, 'A'],
1209
1191
  [7, 'C']
1210
1192
  ]);
1211
- tree.iterationType = 'RECURSIVE';
1212
- expect([...tree]).toEqual([
1193
+ binTree.iterationType = 'RECURSIVE';
1194
+ expect([...binTree]).toEqual([
1213
1195
  [3, 'B'],
1214
1196
  [5, 'A'],
1215
1197
  [7, 'C']
1216
1198
  ]);
1217
- tree.iterationType = 'ITERATIVE';
1199
+ binTree.iterationType = 'ITERATIVE';
1218
1200
 
1219
- const result = tree.morris();
1201
+ const result = binTree.morris();
1220
1202
  expect(result).toEqual([3, 5, 7]);
1221
- tree.clear();
1222
- expect(tree.morris()).toEqual([]);
1203
+ binTree.clear();
1204
+ expect(binTree.morris()).toEqual([]);
1223
1205
  });
1224
1206
 
1225
1207
  it('should perform delete all', () => {
1226
- tree.add([5, 'A']);
1227
- tree.add([3, 'B']);
1228
- tree.add([7, 'C']);
1208
+ binTree.add([5, 'A']);
1209
+ binTree.add([3, 'B']);
1210
+ binTree.add([7, 'C']);
1229
1211
 
1230
- tree.delete(5);
1231
- tree.delete(7);
1232
- tree.delete(3);
1233
- expect(tree.root).toBe(undefined);
1234
- expect(tree.getHeight()).toBe(-1);
1212
+ binTree.delete(5);
1213
+ binTree.delete(7);
1214
+ binTree.delete(3);
1215
+ expect(binTree.root).toBe(undefined);
1216
+ expect(binTree.getHeight()).toBe(-1);
1235
1217
  });
1236
1218
  });
1237
1219
 
1238
1220
  describe('BinaryTree not map mode', () => {
1239
- let tree: BinaryTree<number, string>;
1221
+ let binTree: BinaryTree<number, string>;
1240
1222
 
1241
1223
  beforeEach(() => {
1242
- tree = new BinaryTree<number, string>([], {
1224
+ binTree = new BinaryTree<number, string>([], {
1243
1225
  iterationType: 'RECURSIVE',
1244
1226
  isMapMode: false
1245
1227
  });
1246
1228
  });
1247
1229
 
1248
1230
  afterEach(() => {
1249
- tree.clear();
1231
+ binTree.clear();
1250
1232
  });
1251
1233
 
1252
1234
  it('should add and find nodes', () => {
1253
- tree.add([1, 1]);
1254
- tree.add(undefined);
1255
- tree.add([2, 2]);
1256
- tree.add([3, 3]);
1235
+ binTree.add([1, '1']);
1236
+ binTree.add(undefined);
1237
+ binTree.add([2, '2']);
1238
+ binTree.add([3, '3']);
1257
1239
 
1258
- expect(tree.has(1)).toBe(true);
1259
- expect(tree.has(2)).toBe(true);
1260
- expect(tree.has(3)).toBe(true);
1261
- expect(tree.has(4)).toBe(false);
1262
- const node4 = tree.getNode(4);
1263
- expect(tree.has(node4)).toBe(false);
1264
- expect(tree.has(node => node === node4)).toBe(false);
1265
- expect(tree.has(node => node.value?.toString() === '3')).toBe(true);
1240
+ expect(binTree.has(1)).toBe(true);
1241
+ expect(binTree.has(2)).toBe(true);
1242
+ expect(binTree.has(3)).toBe(true);
1243
+ expect(binTree.has(4)).toBe(false);
1244
+ const node4 = binTree.getNode(4);
1245
+ expect(binTree.has(node4)).toBe(false);
1246
+ expect(binTree.has(node => node === node4)).toBe(false);
1247
+ expect(binTree.has(node => node.value?.toString() === '3')).toBe(true);
1266
1248
  });
1267
1249
 
1268
1250
  it('should isSubtreeBST', () => {
1269
- tree.addMany([
1251
+ binTree.addMany([
1270
1252
  new BinaryTreeNode(4),
1271
1253
  new BinaryTreeNode(2),
1272
1254
  new BinaryTreeNode(6),
@@ -1277,47 +1259,47 @@ describe('BinaryTree not map mode', () => {
1277
1259
  new BinaryTreeNode(4)
1278
1260
  ]);
1279
1261
 
1280
- expect(tree.isBST(tree.getNode(4), 'RECURSIVE')).toBe(true);
1281
- expect(tree.isBST(tree.getNode(4), 'ITERATIVE')).toBe(true);
1262
+ expect(binTree.isBST(binTree.getNode(4), 'RECURSIVE')).toBe(true);
1263
+ expect(binTree.isBST(binTree.getNode(4), 'ITERATIVE')).toBe(true);
1282
1264
  });
1283
1265
 
1284
1266
  it('should get nodes by key', () => {
1285
- tree.add([5, 'A']);
1286
- tree.add([3, 'B']);
1287
- tree.add([7, 'C']);
1267
+ binTree.add([5, 'A']);
1268
+ binTree.add([3, 'B']);
1269
+ binTree.add([7, 'C']);
1288
1270
 
1289
- const nodeA = tree.getNode(5);
1290
- const nodeB = tree.getNode(3);
1271
+ const nodeA = binTree.getNode(5);
1272
+ const nodeB = binTree.getNode(3);
1291
1273
 
1292
1274
  expect(nodeA?.key).toBe(5);
1293
- expect(tree.get(nodeA)).toBe('A');
1275
+ expect(binTree.get(nodeA)).toBe('A');
1294
1276
  expect(nodeB?.key).toBe(3);
1295
- expect(tree.get(nodeB)).toBe('B');
1277
+ expect(binTree.get(nodeB)).toBe('B');
1296
1278
  });
1297
1279
 
1298
1280
  it('should get nodes by a custom callback', () => {
1299
- tree.add([5, 'E']);
1300
- tree.add([4, 'D']);
1301
- tree.add([3, 'C']);
1302
- tree.add([7, 'G']);
1303
- tree.add([null, 'null']);
1304
- tree.add([1, 'A']);
1305
- tree.add([6, 'F']);
1306
- tree.add([null, 'null']);
1307
- tree.add([2, 'B']);
1308
- tree.add([null, 'null']);
1309
-
1310
- const nodes = tree.getNodes(node => node.key === 2);
1281
+ binTree.add([5, 'E']);
1282
+ binTree.add([4, 'D']);
1283
+ binTree.add([3, 'C']);
1284
+ binTree.add([7, 'G']);
1285
+ binTree.add([null, 'null']);
1286
+ binTree.add([1, 'A']);
1287
+ binTree.add([6, 'F']);
1288
+ binTree.add([null, 'null']);
1289
+ binTree.add([2, 'B']);
1290
+ binTree.add([null, 'null']);
1291
+
1292
+ const nodes = binTree.getNodes(node => node.key === 2);
1311
1293
 
1312
1294
  expect(nodes.length).toBe(1);
1313
1295
  expect(nodes[0].key).toBe(2);
1314
1296
 
1315
- const nodesRec = tree.getNodes(node => node.key === 2, false, tree.root, 'RECURSIVE');
1297
+ const nodesRec = binTree.getNodes(node => node.key === 2, false, binTree.root, 'RECURSIVE');
1316
1298
 
1317
1299
  expect(nodesRec.length).toBe(1);
1318
1300
  expect(nodesRec[0].key).toBe(2);
1319
1301
 
1320
- const nodesItr = tree.getNodes(node => node.key === 2, false, tree.root, 'ITERATIVE');
1302
+ const nodesItr = binTree.getNodes(node => node.key === 2, false, binTree.root, 'ITERATIVE');
1321
1303
 
1322
1304
  expect(nodesItr.length).toBe(1);
1323
1305
  expect(nodesItr[0].key).toBe(2);
@@ -1352,8 +1334,8 @@ describe('BinaryTree iterative methods test', () => {
1352
1334
  expect(mockCallback.mock.calls[2]).toEqual([3, 'c']);
1353
1335
  });
1354
1336
 
1355
- it('filter should return a new tree with filtered elements', () => {
1356
- const filteredTree = binaryTree.filter((key, value) => key > 1);
1337
+ it('filter should return a new binTree with filtered elements', () => {
1338
+ const filteredTree = binaryTree.filter(key => key > 1);
1357
1339
  expect(filteredTree.size).toBe(2);
1358
1340
  expect([...filteredTree]).toEqual([
1359
1341
  [3, 'c'],
@@ -1361,7 +1343,7 @@ describe('BinaryTree iterative methods test', () => {
1361
1343
  ]);
1362
1344
  });
1363
1345
 
1364
- it('map should return a new tree with modified elements', () => {
1346
+ it('map should return a new binTree with modified elements', () => {
1365
1347
  const mappedTree = binaryTree.map((key, value) => [(key * 2).toString(), value]);
1366
1348
  expect(mappedTree.size).toBe(3);
1367
1349
  expect([...mappedTree]).toEqual([
@@ -1415,9 +1397,9 @@ describe('BinaryTree iterative methods test', () => {
1415
1397
  });
1416
1398
 
1417
1399
  it('should iterative method return undefined when the node is null', () => {
1418
- const tree = new BinaryTree();
1419
- tree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
1420
- const bfsResult = tree.bfs(undefined, undefined, undefined, true);
1400
+ const binTree = new BinaryTree();
1401
+ binTree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
1402
+ const bfsResult = binTree.bfs(undefined, undefined, undefined, true);
1421
1403
  expect(bfsResult).toEqual([
1422
1404
  -10,
1423
1405
  9,