data-structure-typed 1.53.0 → 1.53.2

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 (253) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/benchmark/report.html +1 -37
  3. package/benchmark/report.json +23 -383
  4. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +1 -1
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  6. package/dist/cjs/data-structures/binary-tree/avl-tree.js +1 -1
  7. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/binary-tree.js +2 -2
  9. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  10. package/dist/cjs/data-structures/binary-tree/bst.js +5 -3
  11. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/rb-tree.js +7 -3
  13. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +1 -1
  15. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  16. package/dist/mjs/constants/index.js +1 -0
  17. package/dist/mjs/constants/index.js.map +1 -0
  18. package/dist/mjs/data-structures/base/index.js +1 -0
  19. package/dist/mjs/data-structures/base/index.js.map +1 -0
  20. package/dist/mjs/data-structures/base/iterable-element-base.js +1 -0
  21. package/dist/mjs/data-structures/base/iterable-element-base.js.map +1 -0
  22. package/dist/mjs/data-structures/base/iterable-entry-base.js +1 -0
  23. package/dist/mjs/data-structures/base/iterable-entry-base.js.map +1 -0
  24. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -1
  25. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
  26. package/dist/mjs/data-structures/binary-tree/avl-tree.js +2 -1
  27. package/dist/mjs/data-structures/binary-tree/avl-tree.js.map +1 -0
  28. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js +1 -0
  29. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
  30. package/dist/mjs/data-structures/binary-tree/binary-tree.js +3 -2
  31. package/dist/mjs/data-structures/binary-tree/binary-tree.js.map +1 -0
  32. package/dist/mjs/data-structures/binary-tree/bst.js +6 -3
  33. package/dist/mjs/data-structures/binary-tree/bst.js.map +1 -0
  34. package/dist/mjs/data-structures/binary-tree/index.js +1 -0
  35. package/dist/mjs/data-structures/binary-tree/index.js.map +1 -0
  36. package/dist/mjs/data-structures/binary-tree/rb-tree.js +8 -3
  37. package/dist/mjs/data-structures/binary-tree/rb-tree.js.map +1 -0
  38. package/dist/mjs/data-structures/binary-tree/segment-tree.js +1 -0
  39. package/dist/mjs/data-structures/binary-tree/segment-tree.js.map +1 -0
  40. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +2 -1
  41. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js.map +1 -0
  42. package/dist/mjs/data-structures/graph/abstract-graph.js +1 -0
  43. package/dist/mjs/data-structures/graph/abstract-graph.js.map +1 -0
  44. package/dist/mjs/data-structures/graph/directed-graph.js +1 -0
  45. package/dist/mjs/data-structures/graph/directed-graph.js.map +1 -0
  46. package/dist/mjs/data-structures/graph/index.js +1 -0
  47. package/dist/mjs/data-structures/graph/index.js.map +1 -0
  48. package/dist/mjs/data-structures/graph/map-graph.js +1 -0
  49. package/dist/mjs/data-structures/graph/map-graph.js.map +1 -0
  50. package/dist/mjs/data-structures/graph/undirected-graph.js +1 -0
  51. package/dist/mjs/data-structures/graph/undirected-graph.js.map +1 -0
  52. package/dist/mjs/data-structures/hash/hash-map.js +1 -0
  53. package/dist/mjs/data-structures/hash/hash-map.js.map +1 -0
  54. package/dist/mjs/data-structures/hash/index.js +1 -0
  55. package/dist/mjs/data-structures/hash/index.js.map +1 -0
  56. package/dist/mjs/data-structures/heap/heap.js +1 -0
  57. package/dist/mjs/data-structures/heap/heap.js.map +1 -0
  58. package/dist/mjs/data-structures/heap/index.js +1 -0
  59. package/dist/mjs/data-structures/heap/index.js.map +1 -0
  60. package/dist/mjs/data-structures/heap/max-heap.js +1 -0
  61. package/dist/mjs/data-structures/heap/max-heap.js.map +1 -0
  62. package/dist/mjs/data-structures/heap/min-heap.js +1 -0
  63. package/dist/mjs/data-structures/heap/min-heap.js.map +1 -0
  64. package/dist/mjs/data-structures/index.js +1 -0
  65. package/dist/mjs/data-structures/index.js.map +1 -0
  66. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +1 -0
  67. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js.map +1 -0
  68. package/dist/mjs/data-structures/linked-list/index.js +1 -0
  69. package/dist/mjs/data-structures/linked-list/index.js.map +1 -0
  70. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +1 -0
  71. package/dist/mjs/data-structures/linked-list/singly-linked-list.js.map +1 -0
  72. package/dist/mjs/data-structures/linked-list/skip-linked-list.js +1 -0
  73. package/dist/mjs/data-structures/linked-list/skip-linked-list.js.map +1 -0
  74. package/dist/mjs/data-structures/matrix/index.js +1 -0
  75. package/dist/mjs/data-structures/matrix/index.js.map +1 -0
  76. package/dist/mjs/data-structures/matrix/matrix.js +1 -0
  77. package/dist/mjs/data-structures/matrix/matrix.js.map +1 -0
  78. package/dist/mjs/data-structures/matrix/navigator.js +1 -0
  79. package/dist/mjs/data-structures/matrix/navigator.js.map +1 -0
  80. package/dist/mjs/data-structures/priority-queue/index.js +1 -0
  81. package/dist/mjs/data-structures/priority-queue/index.js.map +1 -0
  82. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js +1 -0
  83. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js.map +1 -0
  84. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js +1 -0
  85. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js.map +1 -0
  86. package/dist/mjs/data-structures/priority-queue/priority-queue.js +1 -0
  87. package/dist/mjs/data-structures/priority-queue/priority-queue.js.map +1 -0
  88. package/dist/mjs/data-structures/queue/deque.js +1 -0
  89. package/dist/mjs/data-structures/queue/deque.js.map +1 -0
  90. package/dist/mjs/data-structures/queue/index.js +1 -0
  91. package/dist/mjs/data-structures/queue/index.js.map +1 -0
  92. package/dist/mjs/data-structures/queue/queue.js +1 -0
  93. package/dist/mjs/data-structures/queue/queue.js.map +1 -0
  94. package/dist/mjs/data-structures/stack/index.js +1 -0
  95. package/dist/mjs/data-structures/stack/index.js.map +1 -0
  96. package/dist/mjs/data-structures/stack/stack.js +1 -0
  97. package/dist/mjs/data-structures/stack/stack.js.map +1 -0
  98. package/dist/mjs/data-structures/tree/index.js +1 -0
  99. package/dist/mjs/data-structures/tree/index.js.map +1 -0
  100. package/dist/mjs/data-structures/tree/tree.js +1 -0
  101. package/dist/mjs/data-structures/tree/tree.js.map +1 -0
  102. package/dist/mjs/data-structures/trie/index.js +1 -0
  103. package/dist/mjs/data-structures/trie/index.js.map +1 -0
  104. package/dist/mjs/data-structures/trie/trie.js +1 -0
  105. package/dist/mjs/data-structures/trie/trie.js.map +1 -0
  106. package/dist/mjs/index.js +1 -0
  107. package/dist/mjs/index.js.map +1 -0
  108. package/dist/mjs/interfaces/binary-tree.js +1 -0
  109. package/dist/mjs/interfaces/binary-tree.js.map +1 -0
  110. package/dist/mjs/interfaces/doubly-linked-list.js +1 -0
  111. package/dist/mjs/interfaces/doubly-linked-list.js.map +1 -0
  112. package/dist/mjs/interfaces/graph.js +1 -0
  113. package/dist/mjs/interfaces/graph.js.map +1 -0
  114. package/dist/mjs/interfaces/heap.js +1 -0
  115. package/dist/mjs/interfaces/heap.js.map +1 -0
  116. package/dist/mjs/interfaces/index.js +1 -0
  117. package/dist/mjs/interfaces/index.js.map +1 -0
  118. package/dist/mjs/interfaces/navigator.js +1 -0
  119. package/dist/mjs/interfaces/navigator.js.map +1 -0
  120. package/dist/mjs/interfaces/priority-queue.js +1 -0
  121. package/dist/mjs/interfaces/priority-queue.js.map +1 -0
  122. package/dist/mjs/interfaces/segment-tree.js +1 -0
  123. package/dist/mjs/interfaces/segment-tree.js.map +1 -0
  124. package/dist/mjs/interfaces/singly-linked-list.js +1 -0
  125. package/dist/mjs/interfaces/singly-linked-list.js.map +1 -0
  126. package/dist/mjs/types/common.js +1 -0
  127. package/dist/mjs/types/common.js.map +1 -0
  128. package/dist/mjs/types/data-structures/base/base.js +1 -0
  129. package/dist/mjs/types/data-structures/base/base.js.map +1 -0
  130. package/dist/mjs/types/data-structures/base/index.js +1 -0
  131. package/dist/mjs/types/data-structures/base/index.js.map +1 -0
  132. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.js +1 -0
  133. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
  134. package/dist/mjs/types/data-structures/binary-tree/avl-tree.js +1 -0
  135. package/dist/mjs/types/data-structures/binary-tree/avl-tree.js.map +1 -0
  136. package/dist/mjs/types/data-structures/binary-tree/binary-indexed-tree.js +1 -0
  137. package/dist/mjs/types/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
  138. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +1 -0
  139. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js.map +1 -0
  140. package/dist/mjs/types/data-structures/binary-tree/bst.js +1 -0
  141. package/dist/mjs/types/data-structures/binary-tree/bst.js.map +1 -0
  142. package/dist/mjs/types/data-structures/binary-tree/index.js +1 -0
  143. package/dist/mjs/types/data-structures/binary-tree/index.js.map +1 -0
  144. package/dist/mjs/types/data-structures/binary-tree/rb-tree.js +1 -0
  145. package/dist/mjs/types/data-structures/binary-tree/rb-tree.js.map +1 -0
  146. package/dist/mjs/types/data-structures/binary-tree/segment-tree.js +1 -0
  147. package/dist/mjs/types/data-structures/binary-tree/segment-tree.js.map +1 -0
  148. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.js +1 -0
  149. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.js.map +1 -0
  150. package/dist/mjs/types/data-structures/graph/abstract-graph.js +1 -0
  151. package/dist/mjs/types/data-structures/graph/abstract-graph.js.map +1 -0
  152. package/dist/mjs/types/data-structures/graph/directed-graph.js +1 -0
  153. package/dist/mjs/types/data-structures/graph/directed-graph.js.map +1 -0
  154. package/dist/mjs/types/data-structures/graph/index.js +1 -0
  155. package/dist/mjs/types/data-structures/graph/index.js.map +1 -0
  156. package/dist/mjs/types/data-structures/graph/map-graph.js +1 -0
  157. package/dist/mjs/types/data-structures/graph/map-graph.js.map +1 -0
  158. package/dist/mjs/types/data-structures/graph/undirected-graph.js +1 -0
  159. package/dist/mjs/types/data-structures/graph/undirected-graph.js.map +1 -0
  160. package/dist/mjs/types/data-structures/hash/hash-map.js +1 -0
  161. package/dist/mjs/types/data-structures/hash/hash-map.js.map +1 -0
  162. package/dist/mjs/types/data-structures/hash/index.js +1 -0
  163. package/dist/mjs/types/data-structures/hash/index.js.map +1 -0
  164. package/dist/mjs/types/data-structures/heap/heap.js +1 -0
  165. package/dist/mjs/types/data-structures/heap/heap.js.map +1 -0
  166. package/dist/mjs/types/data-structures/heap/index.js +1 -0
  167. package/dist/mjs/types/data-structures/heap/index.js.map +1 -0
  168. package/dist/mjs/types/data-structures/heap/max-heap.js +1 -0
  169. package/dist/mjs/types/data-structures/heap/max-heap.js.map +1 -0
  170. package/dist/mjs/types/data-structures/heap/min-heap.js +1 -0
  171. package/dist/mjs/types/data-structures/heap/min-heap.js.map +1 -0
  172. package/dist/mjs/types/data-structures/index.js +1 -0
  173. package/dist/mjs/types/data-structures/index.js.map +1 -0
  174. package/dist/mjs/types/data-structures/linked-list/doubly-linked-list.js +1 -0
  175. package/dist/mjs/types/data-structures/linked-list/doubly-linked-list.js.map +1 -0
  176. package/dist/mjs/types/data-structures/linked-list/index.js +1 -0
  177. package/dist/mjs/types/data-structures/linked-list/index.js.map +1 -0
  178. package/dist/mjs/types/data-structures/linked-list/singly-linked-list.js +1 -0
  179. package/dist/mjs/types/data-structures/linked-list/singly-linked-list.js.map +1 -0
  180. package/dist/mjs/types/data-structures/linked-list/skip-linked-list.js +1 -0
  181. package/dist/mjs/types/data-structures/linked-list/skip-linked-list.js.map +1 -0
  182. package/dist/mjs/types/data-structures/matrix/index.js +1 -0
  183. package/dist/mjs/types/data-structures/matrix/index.js.map +1 -0
  184. package/dist/mjs/types/data-structures/matrix/matrix.js +1 -0
  185. package/dist/mjs/types/data-structures/matrix/matrix.js.map +1 -0
  186. package/dist/mjs/types/data-structures/matrix/navigator.js +1 -0
  187. package/dist/mjs/types/data-structures/matrix/navigator.js.map +1 -0
  188. package/dist/mjs/types/data-structures/priority-queue/index.js +1 -0
  189. package/dist/mjs/types/data-structures/priority-queue/index.js.map +1 -0
  190. package/dist/mjs/types/data-structures/priority-queue/max-priority-queue.js +1 -0
  191. package/dist/mjs/types/data-structures/priority-queue/max-priority-queue.js.map +1 -0
  192. package/dist/mjs/types/data-structures/priority-queue/min-priority-queue.js +1 -0
  193. package/dist/mjs/types/data-structures/priority-queue/min-priority-queue.js.map +1 -0
  194. package/dist/mjs/types/data-structures/priority-queue/priority-queue.js +1 -0
  195. package/dist/mjs/types/data-structures/priority-queue/priority-queue.js.map +1 -0
  196. package/dist/mjs/types/data-structures/queue/deque.js +1 -0
  197. package/dist/mjs/types/data-structures/queue/deque.js.map +1 -0
  198. package/dist/mjs/types/data-structures/queue/index.js +1 -0
  199. package/dist/mjs/types/data-structures/queue/index.js.map +1 -0
  200. package/dist/mjs/types/data-structures/queue/queue.js +1 -0
  201. package/dist/mjs/types/data-structures/queue/queue.js.map +1 -0
  202. package/dist/mjs/types/data-structures/stack/index.js +1 -0
  203. package/dist/mjs/types/data-structures/stack/index.js.map +1 -0
  204. package/dist/mjs/types/data-structures/stack/stack.js +1 -0
  205. package/dist/mjs/types/data-structures/stack/stack.js.map +1 -0
  206. package/dist/mjs/types/data-structures/tree/index.js +1 -0
  207. package/dist/mjs/types/data-structures/tree/index.js.map +1 -0
  208. package/dist/mjs/types/data-structures/tree/tree.js +1 -0
  209. package/dist/mjs/types/data-structures/tree/tree.js.map +1 -0
  210. package/dist/mjs/types/data-structures/trie/index.js +1 -0
  211. package/dist/mjs/types/data-structures/trie/index.js.map +1 -0
  212. package/dist/mjs/types/data-structures/trie/trie.js +1 -0
  213. package/dist/mjs/types/data-structures/trie/trie.js.map +1 -0
  214. package/dist/mjs/types/index.js +1 -0
  215. package/dist/mjs/types/index.js.map +1 -0
  216. package/dist/mjs/types/utils/index.js +1 -0
  217. package/dist/mjs/types/utils/index.js.map +1 -0
  218. package/dist/mjs/types/utils/utils.js +1 -0
  219. package/dist/mjs/types/utils/utils.js.map +1 -0
  220. package/dist/mjs/types/utils/validate-type.js +1 -0
  221. package/dist/mjs/types/utils/validate-type.js.map +1 -0
  222. package/dist/mjs/utils/index.js +1 -0
  223. package/dist/mjs/utils/index.js.map +1 -0
  224. package/dist/mjs/utils/number.js +1 -0
  225. package/dist/mjs/utils/number.js.map +1 -0
  226. package/dist/mjs/utils/utils.js +1 -0
  227. package/dist/mjs/utils/utils.js.map +1 -0
  228. package/dist/umd/data-structure-typed.js +16 -10
  229. package/dist/umd/data-structure-typed.min.js +2 -2
  230. package/dist/umd/data-structure-typed.min.js.map +1 -1
  231. package/package.json +7 -6
  232. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +1 -1
  233. package/src/data-structures/binary-tree/avl-tree.ts +1 -1
  234. package/src/data-structures/binary-tree/binary-tree.ts +2 -2
  235. package/src/data-structures/binary-tree/bst.ts +4 -3
  236. package/src/data-structures/binary-tree/rb-tree.ts +7 -2
  237. package/src/data-structures/binary-tree/tree-multi-map.ts +1 -1
  238. package/src/types/data-structures/binary-tree/binary-tree.ts +3 -3
  239. package/src/types/data-structures/binary-tree/bst.ts +1 -1
  240. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +1 -1
  241. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +2 -2
  242. package/test/performance/data-structures/binary-tree/binary-tree.test.ts +1 -1
  243. package/test/performance/data-structures/binary-tree/bst.test.ts +1 -1
  244. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +9 -1
  245. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +8 -8
  246. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +28 -9
  247. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +36 -22
  248. package/test/unit/data-structures/binary-tree/bst.test.ts +33 -14
  249. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +19 -0
  250. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +11 -11
  251. package/test/unit/data-structures/graph/directed-graph.test.ts +14 -0
  252. package/test/utils/array.ts +15 -12
  253. package/tsconfig-mjs.json +1 -1
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "data-structure-typed",
3
- "version": "1.53.0",
3
+ "version": "1.53.2",
4
4
  "description": "Javascript Data Structure. Heap, Binary Tree, Red Black Tree, Linked List, Deque, Trie, HashMap, Directed Graph, Undirected Graph, Binary Search Tree(BST), AVL Tree, Priority Queue, Graph, Queue, Tree Multiset, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Queue, Min Heap, Min Priority Queue, Stack. Benchmark compared with C++ STL. API aligned with ES6 and Java.util. Usability is comparable to Python",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/mjs/index.js",
7
+ "browser": "dist/umd/data-structure-typed.min.js",
7
8
  "types": "dist/mjs/index.d.ts",
8
9
  "umd:main": "dist/umd/data-structure-typed.min.js",
9
10
  "exports": {
@@ -68,11 +69,11 @@
68
69
  "@typescript-eslint/eslint-plugin": "^8.12.1",
69
70
  "@typescript-eslint/parser": "^8.12.1",
70
71
  "auto-changelog": "^2.5.0",
71
- "avl-tree-typed": "^1.52.9",
72
+ "avl-tree-typed": "^1.53.1",
72
73
  "benchmark": "^2.1.4",
73
- "binary-tree-typed": "^1.52.9",
74
- "bst-typed": "^1.52.9",
75
- "data-structure-typed": "^1.52.9",
74
+ "binary-tree-typed": "^1.53.1",
75
+ "bst-typed": "^1.53.1",
76
+ "data-structure-typed": "^1.53.1",
76
77
  "dependency-cruiser": "^16.5.0",
77
78
  "doctoc": "^2.2.1",
78
79
  "eslint": "^9.13.0",
@@ -81,7 +82,7 @@
81
82
  "eslint-import-resolver-typescript": "^3.6.3",
82
83
  "eslint-plugin-import": "^2.31.0",
83
84
  "fast-glob": "^3.3.2",
84
- "heap-typed": "^1.52.9",
85
+ "heap-typed": "^1.53.1",
85
86
  "istanbul-badges-readme": "^1.9.0",
86
87
  "jest": "^29.7.0",
87
88
  "js-sdsl": "^4.4.2",
@@ -129,7 +129,7 @@ export class AVLTreeMultiMap<
129
129
  * @returns a new instance of the AVLTreeMultiMapNode class, casted as NODE.
130
130
  */
131
131
  override createNode(key: K, value?: V, count?: number): NODE {
132
- return new AVLTreeMultiMapNode(key, value, count) as NODE;
132
+ return new AVLTreeMultiMapNode(key, this._isMapMode ? undefined : value, count) as NODE;
133
133
  }
134
134
 
135
135
  /**
@@ -99,7 +99,7 @@ export class AVLTree<
99
99
  * type NODE.
100
100
  */
101
101
  override createNode(key: K, value?: V): NODE {
102
- return new AVLTreeNode<K, V, NODE>(key, value) as NODE;
102
+ return new AVLTreeNode<K, V, NODE>(key, this._isMapMode ? undefined : value) as NODE;
103
103
  }
104
104
 
105
105
  /**
@@ -135,7 +135,7 @@ export class BinaryTree<
135
135
  if (keysNodesEntriesOrRaws) this.addMany(keysNodesEntriesOrRaws);
136
136
  }
137
137
 
138
- protected _isMapMode = false;
138
+ protected _isMapMode = true;
139
139
 
140
140
  get isMapMode() {
141
141
  return this._isMapMode;
@@ -181,7 +181,7 @@ export class BinaryTree<
181
181
  * as NODE.
182
182
  */
183
183
  createNode(key: K, value?: V): NODE {
184
- return new BinaryTreeNode<K, V, NODE>(key, value) as NODE;
184
+ return new BinaryTreeNode<K, V, NODE>(key, this._isMapMode ? undefined : value) as NODE;
185
185
  }
186
186
 
187
187
  /**
@@ -141,7 +141,7 @@ export class BST<
141
141
  * @returns The method is returning a new instance of the BSTNode class, casted as the NODE type.
142
142
  */
143
143
  override createNode(key: K, value?: V): NODE {
144
- return new BSTNode<K, V, NODE>(key, value) as NODE;
144
+ return new BSTNode<K, V, NODE>(key, this._isMapMode ? undefined : value) as NODE;
145
145
  }
146
146
 
147
147
  /**
@@ -174,9 +174,9 @@ export class BST<
174
174
  keyNodeEntryOrRaw: BTNRep<K, V, NODE> | R,
175
175
  value?: V
176
176
  ): [OptNode<NODE>, V | undefined] {
177
- const [node, tValue] = super.keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value);
177
+ const [node, entryValue] = super.keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value);
178
178
  if (node === null) return [undefined, undefined];
179
- return [node, tValue ?? value];
179
+ return [node, value ?? entryValue];
180
180
  }
181
181
 
182
182
  /**
@@ -250,6 +250,7 @@ export class BST<
250
250
  while (current !== undefined) {
251
251
  if (this.comparator(current.key, newNode.key) === 0) {
252
252
  this._replaceNode(current, newNode);
253
+ if (this._isMapMode) this._setValue(current.key, newValue);
253
254
  return true;
254
255
  } else if (this.comparator(current.key, newNode.key) > 0) {
255
256
  if (current.left === undefined) {
@@ -106,7 +106,7 @@ export class RedBlackTree<
106
106
  * returned.
107
107
  */
108
108
  override createNode(key: K, value?: V, color: RBTNColor = 'BLACK'): NODE {
109
- return new RedBlackTreeNode<K, V, NODE>(key, value, color) as NODE;
109
+ return new RedBlackTreeNode<K, V, NODE>(key, this._isMapMode ? undefined : value, color) as NODE;
110
110
  }
111
111
 
112
112
  /**
@@ -218,7 +218,12 @@ export class RedBlackTree<
218
218
  if (this._isMapMode) this._setValue(newNode.key, newValue);
219
219
  this._size++;
220
220
  return true;
221
- } else return insertStatus === 'UPDATED';
221
+ }
222
+ if (insertStatus === 'UPDATED') {
223
+ if (this._isMapMode) this._setValue(newNode.key, newValue);
224
+ return true;
225
+ }
226
+ return false;
222
227
  }
223
228
 
224
229
  /**
@@ -124,7 +124,7 @@ export class TreeMultiMap<
124
124
  * @returns A new instance of the TreeMultiMapNode class, casted as NODE.
125
125
  */
126
126
  override createNode(key: K, value?: V, color: RBTNColor = 'BLACK', count?: number): NODE {
127
- return new TreeMultiMapNode(key, value, count, color) as NODE;
127
+ return new TreeMultiMapNode(key, this._isMapMode ? undefined : value, count, color) as NODE;
128
128
  }
129
129
 
130
130
  /**
@@ -9,9 +9,9 @@ export type BinaryTreeNested<K, V, R, NODE extends BinaryTreeNode<K, V, NODE>> =
9
9
  export type ToEntryFn<K, V, R> = (rawElement: R) => BTNEntry<K, V>;
10
10
 
11
11
  export type BinaryTreeOptions<K, V, R> = {
12
- iterationType?: IterationType;
13
- toEntryFn?: ToEntryFn<K, V, R>;
14
- isMapMode?: boolean;
12
+ iterationType?: IterationType;
13
+ toEntryFn?: ToEntryFn<K, V, R>;
14
+ isMapMode?: boolean;
15
15
  }
16
16
 
17
17
  export type BinaryTreePrintOptions = { isShowUndefined?: boolean; isShowNull?: boolean; isShowRedBlackNIL?: boolean };
@@ -7,7 +7,7 @@ export type BSTNodeNested<K, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTN
7
7
  export type BSTNested<K, V, R, NODE extends BSTNode<K, V, NODE>> = BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
8
 
9
9
  export type BSTOptions<K, V, R> = BinaryTreeOptions<K, V, R> & {
10
- comparator?: Comparator<K>
10
+ comparator?: Comparator<K>
11
11
  }
12
12
 
13
13
  export type BSTNOptKey<K> = K | undefined;
@@ -3,7 +3,7 @@ import * as Benchmark from 'benchmark';
3
3
  import { getRandomIntArray, magnitude } from '../../../utils';
4
4
 
5
5
  const suite = new Benchmark.Suite();
6
- const avlTree = new AVLTree<number>([], { isMapMode: true });
6
+ const avlTree = new AVLTree<number>();
7
7
  const { HUNDRED_THOUSAND } = magnitude;
8
8
  const randomArray = getRandomIntArray(HUNDRED_THOUSAND, 0, HUNDRED_THOUSAND - 1, true);
9
9
 
@@ -3,8 +3,8 @@ import * as Benchmark from 'benchmark';
3
3
  import { getRandomIntArray, magnitude } from '../../../utils';
4
4
 
5
5
  const suite = new Benchmark.Suite();
6
- const rbTree = new RedBlackTree<number>([], { isMapMode: true });
7
- const avlTree = new AVLTree<number>([], { isMapMode: true });
6
+ const rbTree = new RedBlackTree<number>();
7
+ const avlTree = new AVLTree<number>();
8
8
  const { TEN_THOUSAND } = magnitude;
9
9
  const arr = getRandomIntArray(TEN_THOUSAND, 0, TEN_THOUSAND - 1, true);
10
10
 
@@ -3,7 +3,7 @@ import * as Benchmark from 'benchmark';
3
3
  import { getRandomIntArray, magnitude } from '../../../utils';
4
4
 
5
5
  const suite = new Benchmark.Suite();
6
- const biTree = new BinaryTree<number>([], { isMapMode: true });
6
+ const biTree = new BinaryTree<number>();
7
7
  const { THOUSAND } = magnitude;
8
8
  const arr = getRandomIntArray(THOUSAND, 0, THOUSAND, true);
9
9
 
@@ -3,7 +3,7 @@ import * as Benchmark from 'benchmark';
3
3
  import { getRandomIntArray, magnitude } from '../../../utils';
4
4
 
5
5
  const suite = new Benchmark.Suite();
6
- const bst = new BST<number>([], { isMapMode: true });
6
+ const bst = new BST<number>();
7
7
  const { TEN_THOUSAND } = magnitude;
8
8
  const arr = getRandomIntArray(TEN_THOUSAND, 0, TEN_THOUSAND, true);
9
9
 
@@ -5,7 +5,8 @@ import { OrderedMap } from 'js-sdsl';
5
5
  import { isCompetitor } from '../../../config';
6
6
 
7
7
  const suite = new Benchmark.Suite();
8
- const rbTree = new RedBlackTree<number>([], { isMapMode: true });
8
+ const rbTree = new RedBlackTree<number>();
9
+ const rbTreeNodeMode = new RedBlackTree<number>([], { isMapMode: false });
9
10
  const { HUNDRED_THOUSAND } = magnitude;
10
11
  const randomArray = getRandomIntArray(HUNDRED_THOUSAND, 0, HUNDRED_THOUSAND - 1, true);
11
12
  const cOrderedMap = new OrderedMap<number, number>();
@@ -22,6 +23,13 @@ suite
22
23
  .add(`${HUNDRED_THOUSAND.toLocaleString()} get`, () => {
23
24
  for (let i = 0; i < randomArray.length; i++) rbTree.get(randomArray[i]);
24
25
  })
26
+ .add(`${HUNDRED_THOUSAND.toLocaleString()} node mode add randomly`, () => {
27
+ rbTreeNodeMode.clear();
28
+ for (let i = 0; i < randomArray.length; i++) rbTree.add(randomArray[i]);
29
+ })
30
+ .add(`${HUNDRED_THOUSAND.toLocaleString()} node mode get`, () => {
31
+ for (let i = 0; i < randomArray.length; i++) rbTreeNodeMode.get(randomArray[i]);
32
+ })
25
33
  .add(`${HUNDRED_THOUSAND.toLocaleString()} iterator`, () => {
26
34
  const entries = [...rbTree];
27
35
  return entries.length === HUNDRED_THOUSAND;
@@ -75,7 +75,7 @@ describe('AVLTreeMultiMap operations test1', () => {
75
75
  const nodeId10 = treeMultimap.getNode(10);
76
76
  expect(nodeId10?.key).toBe(10);
77
77
 
78
- const nodeVal9 = treeMultimap.getNode(node => node.value === 9);
78
+ const nodeVal9 = treeMultimap.getNode(node => node.key === 9);
79
79
  expect(nodeVal9?.key).toBe(9);
80
80
 
81
81
  const nodesByCount1 = treeMultimap.getNodes(node => node.count === 1);
@@ -331,7 +331,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
331
331
  const nodeId10 = treeMultimap.getNode(10);
332
332
  expect(nodeId10?.key).toBe(10);
333
333
 
334
- const nodeVal9 = treeMultimap.getNode(node => node.value === 9);
334
+ const nodeVal9 = treeMultimap.getNode(node => node.key === 9);
335
335
  expect(nodeVal9?.key).toBe(9);
336
336
 
337
337
  const nodesByCount1 = treeMultimap.getNodes(node => node.count === 1);
@@ -762,10 +762,10 @@ describe('AVLTree toEntryFn', () => {
762
762
  });
763
763
  });
764
764
 
765
- describe('AVLTreeMultiMap map mode count', () => {
765
+ describe('AVLTreeMultiMap not map mode count', () => {
766
766
  let tm: AVLTreeMultiMap<number>;
767
767
  beforeEach(() => {
768
- tm = new AVLTreeMultiMap<number>([], { isMapMode: true });
768
+ tm = new AVLTreeMultiMap<number>([], { isMapMode: false });
769
769
  });
770
770
  it('Should added isolated node count ', () => {
771
771
  tm.addMany([
@@ -781,9 +781,9 @@ describe('AVLTreeMultiMap map mode count', () => {
781
781
  });
782
782
  });
783
783
 
784
- describe('AVLTreeMultiMap map mode operations test1', () => {
784
+ describe('AVLTreeMultiMap not map mode operations test1', () => {
785
785
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
786
- const treeMultimap = new AVLTreeMultiMap<number>([], { isMapMode: true });
786
+ const treeMultimap = new AVLTreeMultiMap<number>([], { isMapMode: false });
787
787
 
788
788
  expect(treeMultimap instanceof AVLTreeMultiMap);
789
789
  treeMultimap.add([11, 11]);
@@ -826,11 +826,11 @@ describe('AVLTreeMultiMap map mode operations test1', () => {
826
826
  });
827
827
  });
828
828
 
829
- describe('AVLTreeMultiMap map mode operations test recursively1', () => {
829
+ describe('AVLTreeMultiMap not map mode operations test recursively1', () => {
830
830
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
831
831
  const treeMultimap = new AVLTreeMultiMap<number>([], {
832
832
  iterationType: 'RECURSIVE',
833
- isMapMode: true
833
+ isMapMode: false
834
834
  });
835
835
 
836
836
  expect(treeMultimap instanceof AVLTreeMultiMap);
@@ -32,7 +32,7 @@ describe('AVL Tree Test', () => {
32
32
  expect(lesserSum).toBe(45);
33
33
 
34
34
  // node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
35
- expect(node15?.value).toBe(15);
35
+ expect(node15?.value).toBe(undefined);
36
36
  const dfs = tree.dfs(node => node, 'IN');
37
37
  expect(dfs[0].key).toBe(1);
38
38
  expect(dfs[dfs.length - 1].key).toBe(16);
@@ -106,6 +106,25 @@ describe('AVL Tree Test', () => {
106
106
  expect(lastBFSNodes[1].key).toBe(2);
107
107
  expect(lastBFSNodes[2].key).toBe(16);
108
108
  });
109
+
110
+ it('should replace value', () => {
111
+ const tree = new AVLTree<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
112
+ expect(tree.get(1)).toBe('1');
113
+ expect(tree.getNode(1)?.value).toBe('1');
114
+ tree.add(1, 'a');
115
+ expect(tree.get(1)).toBe('a');
116
+ tree.add([1, 'b']);
117
+ expect(tree.getNode(1)?.value).toBe('b');
118
+ expect(tree.get(1)).toBe('b');
119
+ const treeMap = new AVLTree<number>([4, 5, [1, '1'], 2, 3]);
120
+ expect(treeMap.get(1)).toBe('1');
121
+ expect(treeMap.getNode(1)?.value).toBe(undefined);
122
+ treeMap.add(1, 'a');
123
+ expect(treeMap.get(1)).toBe('a');
124
+ treeMap.add([1, 'b']);
125
+ expect(treeMap.getNode(1)?.value).toBe(undefined);
126
+ expect(treeMap.get(1)).toBe('b');
127
+ });
109
128
  });
110
129
 
111
130
  describe('AVL Tree Test recursively', () => {
@@ -139,7 +158,7 @@ describe('AVL Tree Test recursively', () => {
139
158
  expect(lesserSum).toBe(45);
140
159
 
141
160
  // node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
142
- expect(node15?.value).toBe(15);
161
+ expect(node15?.value).toBe(undefined);
143
162
 
144
163
  const dfs = tree.dfs(node => node, 'IN');
145
164
  expect(dfs[0].key).toBe(1);
@@ -418,7 +437,7 @@ describe('AVLTree iterative methods test', () => {
418
437
  it('should clone work well', () => {
419
438
  const cloned = avl.clone();
420
439
  expect(cloned.root?.left?.key).toBe(1);
421
- expect(cloned.root?.right?.value).toBe('c');
440
+ expect(cloned.root?.right?.value).toBe(undefined);
422
441
  });
423
442
 
424
443
  it('should keys', () => {
@@ -437,10 +456,10 @@ describe('AVLTree iterative methods test', () => {
437
456
  });
438
457
  });
439
458
 
440
- describe('AVL Tree map mode', () => {
459
+ describe('AVL Tree not map mode', () => {
441
460
  it('should perform various operations on a AVL Tree', () => {
442
461
  const arr = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
443
- const tree = new AVLTree<number>([], { isMapMode: true });
462
+ const tree = new AVLTree<number>([], { isMapMode: false });
444
463
 
445
464
  for (const i of arr) tree.add([i, i]);
446
465
 
@@ -473,10 +492,10 @@ describe('AVL Tree map mode', () => {
473
492
  });
474
493
  });
475
494
 
476
- describe('AVL Tree map mode test recursively', () => {
495
+ describe('AVL Tree not map mode test recursively', () => {
477
496
  it('should perform various operations on a AVL Tree', () => {
478
497
  const arr = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
479
- const tree = new AVLTree<number>([], { iterationType: 'RECURSIVE', isMapMode: true });
498
+ const tree = new AVLTree<number>([], { iterationType: 'RECURSIVE', isMapMode: false });
480
499
 
481
500
  for (const i of arr) tree.add([i, i]);
482
501
 
@@ -508,10 +527,10 @@ describe('AVL Tree map mode test recursively', () => {
508
527
  });
509
528
  });
510
529
 
511
- describe('AVLTree iterative methods map mode', () => {
530
+ describe('AVLTree iterative methods not map mode', () => {
512
531
  let avl: AVLTree<number, string>;
513
532
  beforeEach(() => {
514
- avl = new AVLTree<number, string>([], { isMapMode: true });
533
+ avl = new AVLTree<number, string>([], { isMapMode: false });
515
534
  avl.add([1, 'a']);
516
535
  avl.add([2, 'b']);
517
536
  avl.add([3, 'c']);
@@ -102,10 +102,10 @@ describe('BinaryTree addMany', () => {
102
102
  ],
103
103
  [undefined, 22, 44, 33]
104
104
  );
105
- expect(tree.getNodeByKey(2)?.value).toBe(22);
106
- expect(tree.getNodeByKey(3)?.value).toBe(33);
107
- expect(tree.getNodeByKey(4)?.value).toBe(44);
108
- expect(tree.getNodeByKey(1)?.value).toBe(1);
105
+ expect(tree.get(2)).toBe(22);
106
+ expect(tree.get(tree.getNodeByKey(3))).toBe(33);
107
+ expect(tree.get(tree.getNodeByKey(4))).toBe(44);
108
+ expect(tree.get(tree.getNodeByKey(1))).toBe(1);
109
109
  });
110
110
 
111
111
  it('should addMany undefined and null', () => {
@@ -193,7 +193,7 @@ describe('BinaryTree', () => {
193
193
  const node4 = tree.getNode(4);
194
194
  expect(tree.has(node4)).toBe(false);
195
195
  expect(tree.has(node => node === node4)).toBe(false);
196
- expect(tree.has(node => node.value?.toString() === '3')).toBe(true);
196
+ expect(tree.has(node => node.key?.toString() === '3')).toBe(true);
197
197
  });
198
198
 
199
199
  it('should the clone method work fine', () => {
@@ -768,6 +768,25 @@ describe('BinaryTree', () => {
768
768
  });
769
769
  expect(bTree.keyValueNodeEntryRawToNodeAndValue({ obj: { id: 1 } })).toEqual([undefined, undefined]);
770
770
  });
771
+
772
+ 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');
781
+ const treeMap = new BinaryTree<number>([4, 5, [1, '1'], 2, 3]);
782
+ expect(treeMap.get(1)).toBe('1');
783
+ expect(treeMap.getNode(1)?.value).toBe(undefined);
784
+ treeMap.add(1, 'a');
785
+ expect(treeMap.get(1)).toBe('a');
786
+ treeMap.add([1, 'b']);
787
+ expect(treeMap.getNode(1)?.value).toBe(undefined);
788
+ expect(treeMap.get(1)).toBe('b');
789
+ });
771
790
  });
772
791
 
773
792
  describe('BinaryTree ensureNode', () => {
@@ -1049,9 +1068,9 @@ describe('BinaryTree', () => {
1049
1068
  const nodeB = tree.getNode(3);
1050
1069
 
1051
1070
  expect(nodeA?.key).toBe(5);
1052
- expect(nodeA?.value).toBe('A');
1071
+ expect(nodeA?.value).toBe(undefined);
1053
1072
  expect(nodeB?.key).toBe(3);
1054
- expect(nodeB?.value).toBe('B');
1073
+ expect(tree.get(nodeB)).toBe('B');
1055
1074
  });
1056
1075
 
1057
1076
  it('should return null when getting a non-existent node', () => {
@@ -1160,21 +1179,17 @@ describe('BinaryTree', () => {
1160
1179
  tree.add([2, 'B']);
1161
1180
  tree.add([null, 'null']);
1162
1181
 
1163
- const nodes = tree.isMapMode ? tree.getNodes(node => node.key === 2) : tree.getNodes(node => node.value === 'B');
1182
+ const nodes = tree.getNodes(node => node.key === 2);
1164
1183
 
1165
1184
  expect(nodes.length).toBe(1);
1166
1185
  expect(nodes[0].key).toBe(2);
1167
1186
 
1168
- const nodesRec = tree.isMapMode
1169
- ? tree.getNodes(node => node.key === 2, false, tree.root, 'RECURSIVE')
1170
- : tree.getNodes(node => node.value === 'B', false, tree.root, 'RECURSIVE');
1187
+ const nodesRec = tree.getNodes(node => node.key === 2, false, tree.root, 'RECURSIVE');
1171
1188
 
1172
1189
  expect(nodesRec.length).toBe(1);
1173
1190
  expect(nodesRec[0].key).toBe(2);
1174
1191
 
1175
- const nodesItr = tree.isMapMode
1176
- ? tree.getNodes(node => node.key === 2, false, tree.root, 'ITERATIVE')
1177
- : tree.getNodes(node => node.value === 'B', false, tree.root, 'ITERATIVE');
1192
+ const nodesItr = tree.getNodes(node => node.key === 2, false, tree.root, 'ITERATIVE');
1178
1193
 
1179
1194
  expect(nodesItr.length).toBe(1);
1180
1195
  expect(nodesItr[0].key).toBe(2);
@@ -1220,13 +1235,13 @@ describe('BinaryTree', () => {
1220
1235
  });
1221
1236
  });
1222
1237
 
1223
- describe('BinaryTree map mode', () => {
1238
+ describe('BinaryTree not map mode', () => {
1224
1239
  let tree: BinaryTree<number, string>;
1225
1240
 
1226
1241
  beforeEach(() => {
1227
1242
  tree = new BinaryTree<number, string>([], {
1228
1243
  iterationType: 'RECURSIVE',
1229
- isMapMode: true
1244
+ isMapMode: false
1230
1245
  });
1231
1246
  });
1232
1247
 
@@ -1247,8 +1262,7 @@ describe('BinaryTree map mode', () => {
1247
1262
  const node4 = tree.getNode(4);
1248
1263
  expect(tree.has(node4)).toBe(false);
1249
1264
  expect(tree.has(node => node === node4)).toBe(false);
1250
- if (tree.isMapMode) expect(tree.has(node => node.key?.toString() === '3')).toBe(true);
1251
- else expect(tree.has(node => node.value?.toString() === '3')).toBe(true);
1265
+ expect(tree.has(node => node.value?.toString() === '3')).toBe(true);
1252
1266
  });
1253
1267
 
1254
1268
  it('should isSubtreeBST', () => {
@@ -1379,8 +1393,8 @@ describe('BinaryTree iterative methods test', () => {
1379
1393
  it('should clone work well', () => {
1380
1394
  const cloned = binaryTree.clone();
1381
1395
  expect(cloned.root?.left?.key).toBe(2);
1382
- if (cloned.isMapMode) expect(cloned.get(cloned.root?.right)).toBe('c');
1383
- else expect(cloned.root?.right?.value).toBe('c');
1396
+ expect(cloned.root?.right?.value).toBe(undefined);
1397
+ expect(cloned.get(cloned.root?.right)).toBe('c');
1384
1398
  });
1385
1399
 
1386
1400
  it('should keys', () => {
@@ -1423,10 +1437,10 @@ describe('BinaryTree iterative methods test', () => {
1423
1437
  });
1424
1438
  });
1425
1439
 
1426
- describe('BinaryTree map mode iterative methods test', () => {
1440
+ describe('BinaryTree not map mode iterative methods test', () => {
1427
1441
  let binaryTree: BinaryTree<number, string>;
1428
1442
  beforeEach(() => {
1429
- binaryTree = new BinaryTree<number, string>([], { isMapMode: true });
1443
+ binaryTree = new BinaryTree<number, string>([], { isMapMode: false });
1430
1444
  binaryTree.add([1, 'a']);
1431
1445
  binaryTree.add(2, 'b');
1432
1446
  binaryTree.add([3, 'c']);
@@ -74,7 +74,7 @@ describe('BST operations test', () => {
74
74
  const nodeId10 = bst.getNode(10);
75
75
  expect(nodeId10?.key).toBe(10);
76
76
 
77
- const nodeVal9 = bst.getNode(node => node.value === 9);
77
+ const nodeVal9 = bst.getNode(node => node.key === 9);
78
78
  expect(nodeVal9?.key).toBe(9);
79
79
 
80
80
  const leftMost = bst.getLeftMost();
@@ -86,7 +86,7 @@ describe('BST operations test', () => {
86
86
  const minNodeBySpecificNode = node15 && bst.getLeftMost(node => node, node15);
87
87
  expect(minNodeBySpecificNode?.key).toBe(12);
88
88
 
89
- const nodes = bst.getNodes(node => node.value === 15);
89
+ const nodes = bst.getNodes(node => node.key === 15);
90
90
  expect(nodes.map(node => node.key)).toEqual([15]);
91
91
 
92
92
  let subTreeSum = 0;
@@ -291,7 +291,7 @@ describe('BST operations test', () => {
291
291
  expect(leftMost).toBe(1);
292
292
 
293
293
  const node15 = objBST.getNode(15);
294
- expect(node15?.value).toEqual({
294
+ expect(objBST.get(node15)).toEqual({
295
295
  name: 'Alice',
296
296
  age: 15
297
297
  });
@@ -470,6 +470,25 @@ describe('BST operations test', () => {
470
470
  const nodeNull = bst.keyValueNodeEntryRawToNodeAndValue(null);
471
471
  expect(nodeNull).toEqual([undefined, undefined]);
472
472
  });
473
+
474
+ it('should replace value', () => {
475
+ const tree = new BST<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
476
+ expect(tree.get(1)).toBe('1');
477
+ expect(tree.getNode(1)?.value).toBe('1');
478
+ tree.add(1, 'a');
479
+ expect(tree.get(1)).toBe('a');
480
+ tree.add([1, 'b']);
481
+ expect(tree.getNode(1)?.value).toBe('b');
482
+ expect(tree.get(1)).toBe('b');
483
+ const treeMap = new BST<number>([4, 5, [1, '1'], 2, 3]);
484
+ expect(treeMap.get(1)).toBe('1');
485
+ expect(treeMap.getNode(1)?.value).toBe(undefined);
486
+ treeMap.add(1, 'a');
487
+ expect(treeMap.get(1)).toBe('a');
488
+ treeMap.add([1, 'b']);
489
+ expect(treeMap.getNode(1)?.value).toBe(undefined);
490
+ expect(treeMap.get(1)).toBe('b');
491
+ });
473
492
  });
474
493
 
475
494
  describe('BST operations test recursively', () => {
@@ -708,7 +727,7 @@ describe('BST operations test recursively', () => {
708
727
  expect(leftMost).toBe(1);
709
728
 
710
729
  const node15 = objBST.getNode(15);
711
- expect(node15?.value).toEqual({
730
+ expect(objBST.get(node15)).toEqual({
712
731
  key: 15,
713
732
  keyA: 15
714
733
  });
@@ -1135,7 +1154,7 @@ describe('BST iterative methods test', () => {
1135
1154
  it('should clone work well', () => {
1136
1155
  const cloned = bst.clone();
1137
1156
  expect(cloned.root?.left).toBe(undefined);
1138
- expect(cloned.root?.right?.value).toBe('b');
1157
+ expect(cloned.root?.right?.value).toBe(undefined);
1139
1158
  });
1140
1159
 
1141
1160
  it('should keys', () => {
@@ -1210,13 +1229,13 @@ describe('BST iterative methods test', () => {
1210
1229
  );
1211
1230
 
1212
1231
  expect(balanced.leaves()).toEqual([1, 6, 4, 9]);
1213
- expect(balanced.leaves(node => node?.value)).toEqual(['a', 'f', 'd', 'i']);
1232
+ expect(balanced.leaves(node => balanced.get(node))).toEqual(['a', 'f', 'd', 'i']);
1214
1233
  });
1215
1234
  });
1216
1235
 
1217
- describe('BST operations map mode test', () => {
1236
+ describe('BST operations not map mode test', () => {
1218
1237
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
1219
- const bst = new BST<number, number>([], { isMapMode: true });
1238
+ const bst = new BST<number, number>([], { isMapMode: false });
1220
1239
  expect(bst).toBeInstanceOf(BST);
1221
1240
  bst.add([11, 11]);
1222
1241
  bst.add([3, 3]);
@@ -1269,7 +1288,7 @@ describe('BST operations map mode test', () => {
1269
1288
  });
1270
1289
 
1271
1290
  it('should perform various operations on a Binary Search Tree with object values', () => {
1272
- const objBST = new BST<number, { name: string; age: number }>([], { isMapMode: true });
1291
+ const objBST = new BST<number, { name: string; age: number }>([], { isMapMode: false });
1273
1292
  expect(objBST).toBeInstanceOf(BST);
1274
1293
  objBST.add([11, { name: '11', age: 11 }]);
1275
1294
  objBST.add([3, { name: '3', age: 3 }]);
@@ -1322,7 +1341,7 @@ describe('BST operations map mode test', () => {
1322
1341
  });
1323
1342
 
1324
1343
  it('should keyValueNodeEntryRawToNodeAndValue', () => {
1325
- const bst = new BST<number>([], { isMapMode: true });
1344
+ const bst = new BST<number>([], { isMapMode: false });
1326
1345
  const node0 = bst.keyValueNodeEntryRawToNodeAndValue(0);
1327
1346
  expect(node0).toEqual([
1328
1347
  {
@@ -1343,11 +1362,11 @@ describe('BST operations map mode test', () => {
1343
1362
  });
1344
1363
  });
1345
1364
 
1346
- describe('BST operations map mode test recursively', () => {
1365
+ describe('BST operations not map mode test recursively', () => {
1347
1366
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
1348
1367
  const bst = new BST<number>([], {
1349
1368
  iterationType: 'RECURSIVE',
1350
- isMapMode: true
1369
+ isMapMode: false
1351
1370
  });
1352
1371
  expect(bst).toBeInstanceOf(BST);
1353
1372
  bst.add([11, 11]);
@@ -1375,7 +1394,7 @@ describe('BST operations map mode test recursively', () => {
1375
1394
  });
1376
1395
 
1377
1396
  it('should perform various operations on a Binary Search Tree with object values', () => {
1378
- const objBST = new BST<number, { key: number; keyA: number }>([], { isMapMode: true });
1397
+ const objBST = new BST<number, { key: number; keyA: number }>([], { isMapMode: false });
1379
1398
  expect(objBST).toBeInstanceOf(BST);
1380
1399
  objBST.add([11, { key: 11, keyA: 11 }]);
1381
1400
  objBST.add([3, { key: 3, keyA: 3 }]);
@@ -1429,7 +1448,7 @@ describe('BST operations map mode test recursively', () => {
1429
1448
  });
1430
1449
  });
1431
1450
 
1432
- describe('BST iterative methods map mode test', () => {
1451
+ describe('BST iterative methods not map mode test', () => {
1433
1452
  let bst: BST<number, string>;
1434
1453
  beforeEach(() => {
1435
1454
  bst = new BST();