data-structure-typed 1.52.5 → 1.52.7

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 (181) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +33 -30
  3. package/benchmark/report.html +13 -13
  4. package/benchmark/report.json +156 -156
  5. package/dist/cjs/constants/index.d.ts +4 -0
  6. package/dist/cjs/constants/index.js +9 -0
  7. package/dist/cjs/constants/index.js.map +1 -0
  8. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +8 -1
  9. package/dist/cjs/data-structures/base/iterable-element-base.js +10 -1
  10. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
  11. package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +8 -1
  12. package/dist/cjs/data-structures/base/iterable-entry-base.js +10 -10
  13. package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +31 -32
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +43 -44
  16. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +23 -24
  18. package/dist/cjs/data-structures/binary-tree/avl-tree.js +71 -64
  19. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js +2 -2
  21. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +534 -402
  22. package/dist/cjs/data-structures/binary-tree/binary-tree.js +669 -598
  23. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  24. package/dist/cjs/data-structures/binary-tree/bst.d.ts +72 -65
  25. package/dist/cjs/data-structures/binary-tree/bst.js +115 -113
  26. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  27. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +21 -24
  28. package/dist/cjs/data-structures/binary-tree/rb-tree.js +40 -39
  29. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  30. package/dist/cjs/data-structures/binary-tree/segment-tree.d.ts +2 -2
  31. package/dist/cjs/data-structures/binary-tree/segment-tree.js +2 -2
  32. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +28 -31
  33. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +44 -43
  34. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  35. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +2 -2
  36. package/dist/cjs/data-structures/graph/abstract-graph.js +7 -4
  37. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  38. package/dist/cjs/data-structures/graph/directed-graph.d.ts +2 -2
  39. package/dist/cjs/data-structures/graph/directed-graph.js +4 -2
  40. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  41. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +2 -2
  42. package/dist/cjs/data-structures/hash/hash-map.d.ts +2 -2
  43. package/dist/cjs/data-structures/hash/hash-map.js +1 -1
  44. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  45. package/dist/cjs/data-structures/heap/heap.js +3 -3
  46. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  47. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  48. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +7 -7
  49. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  50. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  51. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +6 -6
  52. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  53. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
  54. package/dist/cjs/data-structures/matrix/matrix.d.ts +2 -2
  55. package/dist/cjs/data-structures/matrix/navigator.d.ts +2 -2
  56. package/dist/cjs/data-structures/matrix/navigator.js +4 -2
  57. package/dist/cjs/data-structures/matrix/navigator.js.map +1 -1
  58. package/dist/cjs/data-structures/queue/deque.d.ts +3 -3
  59. package/dist/cjs/data-structures/queue/deque.js +29 -29
  60. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  61. package/dist/cjs/data-structures/queue/queue.d.ts +1 -1
  62. package/dist/cjs/data-structures/stack/stack.d.ts +2 -2
  63. package/dist/cjs/data-structures/tree/tree.js +2 -0
  64. package/dist/cjs/data-structures/tree/tree.js.map +1 -1
  65. package/dist/cjs/data-structures/trie/trie.d.ts +2 -2
  66. package/dist/cjs/data-structures/trie/trie.js +1 -1
  67. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  68. package/dist/cjs/index.d.ts +1 -0
  69. package/dist/cjs/index.js +1 -0
  70. package/dist/cjs/index.js.map +1 -1
  71. package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
  72. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
  73. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js +0 -6
  74. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js.map +1 -1
  75. package/dist/mjs/constants/index.d.ts +4 -0
  76. package/dist/mjs/constants/index.js +5 -0
  77. package/dist/mjs/data-structures/base/iterable-element-base.d.ts +8 -1
  78. package/dist/mjs/data-structures/base/iterable-element-base.js +10 -1
  79. package/dist/mjs/data-structures/base/iterable-entry-base.d.ts +8 -1
  80. package/dist/mjs/data-structures/base/iterable-entry-base.js +10 -10
  81. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +31 -32
  82. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +44 -44
  83. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +23 -24
  84. package/dist/mjs/data-structures/binary-tree/avl-tree.js +72 -64
  85. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js +2 -2
  86. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +534 -402
  87. package/dist/mjs/data-structures/binary-tree/binary-tree.js +668 -592
  88. package/dist/mjs/data-structures/binary-tree/bst.d.ts +72 -65
  89. package/dist/mjs/data-structures/binary-tree/bst.js +116 -112
  90. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +21 -24
  91. package/dist/mjs/data-structures/binary-tree/rb-tree.js +41 -38
  92. package/dist/mjs/data-structures/binary-tree/segment-tree.d.ts +2 -2
  93. package/dist/mjs/data-structures/binary-tree/segment-tree.js +2 -2
  94. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +28 -31
  95. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +45 -42
  96. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +2 -2
  97. package/dist/mjs/data-structures/graph/abstract-graph.js +7 -4
  98. package/dist/mjs/data-structures/graph/directed-graph.d.ts +2 -2
  99. package/dist/mjs/data-structures/graph/directed-graph.js +4 -2
  100. package/dist/mjs/data-structures/graph/undirected-graph.d.ts +2 -2
  101. package/dist/mjs/data-structures/hash/hash-map.d.ts +2 -2
  102. package/dist/mjs/data-structures/hash/hash-map.js +1 -1
  103. package/dist/mjs/data-structures/heap/heap.js +3 -3
  104. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  105. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +7 -7
  106. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  107. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +6 -6
  108. package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
  109. package/dist/mjs/data-structures/matrix/matrix.d.ts +2 -2
  110. package/dist/mjs/data-structures/matrix/navigator.d.ts +2 -2
  111. package/dist/mjs/data-structures/matrix/navigator.js +4 -2
  112. package/dist/mjs/data-structures/queue/deque.d.ts +3 -3
  113. package/dist/mjs/data-structures/queue/deque.js +29 -29
  114. package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
  115. package/dist/mjs/data-structures/stack/stack.d.ts +2 -2
  116. package/dist/mjs/data-structures/tree/tree.js +2 -0
  117. package/dist/mjs/data-structures/trie/trie.d.ts +2 -2
  118. package/dist/mjs/data-structures/trie/trie.js +1 -1
  119. package/dist/mjs/index.d.ts +1 -0
  120. package/dist/mjs/index.js +1 -0
  121. package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
  122. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
  123. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +1 -5
  124. package/dist/umd/data-structure-typed.js +1344 -1614
  125. package/dist/umd/data-structure-typed.min.js +10 -3
  126. package/dist/umd/data-structure-typed.min.js.map +1 -1
  127. package/eslint.config.mjs +69 -0
  128. package/package.json +30 -28
  129. package/src/constants/index.ts +4 -0
  130. package/src/data-structures/base/iterable-element-base.ts +11 -1
  131. package/src/data-structures/base/iterable-entry-base.ts +11 -19
  132. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +47 -50
  133. package/src/data-structures/binary-tree/avl-tree.ts +69 -71
  134. package/src/data-structures/binary-tree/binary-indexed-tree.ts +2 -2
  135. package/src/data-structures/binary-tree/binary-tree.ts +698 -726
  136. package/src/data-structures/binary-tree/bst.ts +123 -129
  137. package/src/data-structures/binary-tree/rb-tree.ts +44 -46
  138. package/src/data-structures/binary-tree/segment-tree.ts +2 -2
  139. package/src/data-structures/binary-tree/tree-multi-map.ts +48 -49
  140. package/src/data-structures/graph/abstract-graph.ts +6 -6
  141. package/src/data-structures/graph/directed-graph.ts +4 -4
  142. package/src/data-structures/graph/undirected-graph.ts +2 -2
  143. package/src/data-structures/hash/hash-map.ts +3 -3
  144. package/src/data-structures/heap/heap.ts +3 -3
  145. package/src/data-structures/linked-list/doubly-linked-list.ts +9 -9
  146. package/src/data-structures/linked-list/singly-linked-list.ts +8 -8
  147. package/src/data-structures/linked-list/skip-linked-list.ts +2 -2
  148. package/src/data-structures/matrix/matrix.ts +2 -2
  149. package/src/data-structures/matrix/navigator.ts +4 -4
  150. package/src/data-structures/queue/deque.ts +31 -31
  151. package/src/data-structures/queue/queue.ts +1 -1
  152. package/src/data-structures/stack/stack.ts +2 -2
  153. package/src/data-structures/trie/trie.ts +3 -3
  154. package/src/index.ts +1 -0
  155. package/src/interfaces/binary-tree.ts +3 -3
  156. package/src/types/data-structures/binary-tree/binary-tree.ts +3 -5
  157. package/test/config.ts +1 -7
  158. package/test/integration/all-in-one.test.ts +2 -2
  159. package/test/integration/avl-tree.test.ts +3 -3
  160. package/test/integration/bst.test.ts +19 -18
  161. package/test/integration/heap.test.js +6 -1
  162. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +39 -39
  163. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
  164. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +140 -112
  165. package/test/unit/data-structures/binary-tree/bst.test.ts +41 -13
  166. package/test/unit/data-structures/binary-tree/overall.test.ts +0 -6
  167. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +6 -6
  168. package/test/unit/data-structures/binary-tree/segment-tree.test.ts +88 -34
  169. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +42 -42
  170. package/test/unit/data-structures/graph/abstract-graph.test.ts +1 -1
  171. package/test/unit/data-structures/graph/directed-graph.test.ts +4 -4
  172. package/test/unit/data-structures/graph/undirected-graph.test.ts +14 -2
  173. package/test/unit/data-structures/hash/hash-map.test.ts +1 -1
  174. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +1 -1
  175. package/test/unit/data-structures/matrix/navigator.test.ts +2 -2
  176. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -1
  177. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +4 -4
  178. package/test/unit/data-structures/stack/stack.test.ts +6 -0
  179. package/test/unit/unrestricted-interconversion.test.ts +24 -24
  180. package/test/utils/big-o.ts +5 -4
  181. package/.eslintrc.js +0 -64
@@ -75,13 +75,13 @@ 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(9, node => node.value);
78
+ const nodeVal9 = treeMultimap.getNode(node => node.value === 9);
79
79
  expect(nodeVal9?.key).toBe(9);
80
80
 
81
- const nodesByCount1 = treeMultimap.getNodes(1, node => node.count);
81
+ const nodesByCount1 = treeMultimap.getNodes(node => node.count === 1);
82
82
  expect(nodesByCount1.length).toBe(14);
83
83
 
84
- const nodesByCount2 = treeMultimap.getNodes(2, node => node.count);
84
+ const nodesByCount2 = treeMultimap.getNodes(node => node.count === 2);
85
85
  expect(nodesByCount2.length).toBe(2);
86
86
  const leftMost = treeMultimap.getLeftMost();
87
87
  expect(leftMost).toBe(1);
@@ -91,7 +91,7 @@ describe('AVLTreeMultiMap operations test1', () => {
91
91
  expect(minNodeBySpecificNode?.key).toBe(15);
92
92
 
93
93
  let subTreeSum = 0;
94
- node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'PRE', 15);
94
+ if (node15) treeMultimap.dfs(node => (subTreeSum += node.key), 'PRE', 15);
95
95
  expect(subTreeSum).toBe(31);
96
96
  let lesserSum = 0;
97
97
  treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), -1, 10);
@@ -123,7 +123,7 @@ describe('AVLTreeMultiMap operations test1', () => {
123
123
  expect(bfsNodesAfterBalanced[0].key).toBe(8);
124
124
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
125
125
 
126
- const removed11 = treeMultimap.delete(11, undefined, true);
126
+ const removed11 = treeMultimap.delete(11, true);
127
127
  expect(removed11 instanceof Array);
128
128
  expect(removed11[0]);
129
129
  expect(removed11[0].deleted);
@@ -134,7 +134,7 @@ describe('AVLTreeMultiMap operations test1', () => {
134
134
 
135
135
  expect(treeMultimap.getHeight(15)).toBe(1);
136
136
 
137
- const removed1 = treeMultimap.delete(1, undefined, true);
137
+ const removed1 = treeMultimap.delete(1, true);
138
138
  expect(removed1 instanceof Array);
139
139
  expect(removed1[0]);
140
140
  expect(removed1[0].deleted);
@@ -144,7 +144,7 @@ describe('AVLTreeMultiMap operations test1', () => {
144
144
 
145
145
  expect(treeMultimap.getHeight()).toBe(4);
146
146
 
147
- const removed4 = treeMultimap.delete(4, undefined, true);
147
+ const removed4 = treeMultimap.delete(4, true);
148
148
  expect(removed4 instanceof Array);
149
149
  expect(removed4[0]);
150
150
  expect(removed4[0].deleted);
@@ -153,7 +153,7 @@ describe('AVLTreeMultiMap operations test1', () => {
153
153
  expect(treeMultimap.isAVLBalanced()).toBe(true);
154
154
  expect(treeMultimap.getHeight()).toBe(4);
155
155
 
156
- const removed10 = treeMultimap.delete(10, undefined, true);
156
+ const removed10 = treeMultimap.delete(10, true);
157
157
  expect(removed10 instanceof Array);
158
158
  expect(removed10[0]);
159
159
  expect(removed10[0].deleted);
@@ -162,7 +162,7 @@ describe('AVLTreeMultiMap operations test1', () => {
162
162
 
163
163
  expect(treeMultimap.getHeight()).toBe(3);
164
164
 
165
- const removed15 = treeMultimap.delete(15, undefined, true);
165
+ const removed15 = treeMultimap.delete(15, true);
166
166
  expect(removed15 instanceof Array);
167
167
  expect(removed15[0]);
168
168
  expect(removed15[0].deleted);
@@ -171,7 +171,7 @@ describe('AVLTreeMultiMap operations test1', () => {
171
171
  expect(treeMultimap.isAVLBalanced()).toBe(true);
172
172
  expect(treeMultimap.getHeight()).toBe(3);
173
173
 
174
- const removed5 = treeMultimap.delete(5, undefined, true);
174
+ const removed5 = treeMultimap.delete(5, true);
175
175
  expect(removed5 instanceof Array);
176
176
  expect(removed5[0]);
177
177
  expect(removed5[0].deleted);
@@ -180,7 +180,7 @@ describe('AVLTreeMultiMap operations test1', () => {
180
180
  expect(treeMultimap.isAVLBalanced()).toBe(true);
181
181
  expect(treeMultimap.getHeight()).toBe(3);
182
182
 
183
- const removed13 = treeMultimap.delete(13, undefined, true);
183
+ const removed13 = treeMultimap.delete(13, true);
184
184
  expect(removed13 instanceof Array);
185
185
  expect(removed13[0]);
186
186
  expect(removed13[0].deleted);
@@ -188,7 +188,7 @@ describe('AVLTreeMultiMap operations test1', () => {
188
188
  expect(treeMultimap.isAVLBalanced()).toBe(true);
189
189
  expect(treeMultimap.getHeight()).toBe(3);
190
190
 
191
- const removed3 = treeMultimap.delete(3, undefined, true);
191
+ const removed3 = treeMultimap.delete(3, true);
192
192
  expect(removed3 instanceof Array);
193
193
  expect(removed3[0]);
194
194
  expect(removed3[0].deleted);
@@ -196,7 +196,7 @@ describe('AVLTreeMultiMap operations test1', () => {
196
196
  expect(treeMultimap.isAVLBalanced()).toBe(true);
197
197
  expect(treeMultimap.getHeight()).toBe(3);
198
198
 
199
- const removed8 = treeMultimap.delete(8, undefined, true);
199
+ const removed8 = treeMultimap.delete(8, true);
200
200
  expect(removed8 instanceof Array);
201
201
  expect(removed8[0]);
202
202
  expect(removed8[0].deleted);
@@ -204,17 +204,17 @@ describe('AVLTreeMultiMap operations test1', () => {
204
204
  expect(treeMultimap.isAVLBalanced()).toBe(true);
205
205
  expect(treeMultimap.getHeight()).toBe(3);
206
206
 
207
- const removed6 = treeMultimap.delete(6, undefined, true);
207
+ const removed6 = treeMultimap.delete(6, true);
208
208
  expect(removed6 instanceof Array);
209
209
  expect(removed6[0]);
210
210
  expect(removed6[0].deleted);
211
211
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
212
- expect(treeMultimap.delete(6, undefined, true).length).toBe(0);
212
+ expect(treeMultimap.delete(6, true).length).toBe(0);
213
213
  expect(treeMultimap.isAVLBalanced()).toBe(true);
214
214
 
215
215
  expect(treeMultimap.getHeight()).toBe(2);
216
216
 
217
- const removed7 = treeMultimap.delete(7, undefined, true);
217
+ const removed7 = treeMultimap.delete(7, true);
218
218
  expect(removed7 instanceof Array);
219
219
  expect(removed7[0]);
220
220
  expect(removed7[0].deleted);
@@ -222,7 +222,7 @@ describe('AVLTreeMultiMap operations test1', () => {
222
222
  expect(treeMultimap.isAVLBalanced()).toBe(true);
223
223
  expect(treeMultimap.getHeight()).toBe(2);
224
224
 
225
- const removed9 = treeMultimap.delete(9, undefined, true);
225
+ const removed9 = treeMultimap.delete(9, true);
226
226
  expect(removed9 instanceof Array);
227
227
  expect(removed9[0]);
228
228
  expect(removed9[0].deleted);
@@ -230,7 +230,7 @@ describe('AVLTreeMultiMap operations test1', () => {
230
230
  expect(treeMultimap.isAVLBalanced()).toBe(true);
231
231
  expect(treeMultimap.getHeight()).toBe(2);
232
232
 
233
- const removed14 = treeMultimap.delete(14, undefined, true);
233
+ const removed14 = treeMultimap.delete(14, true);
234
234
  expect(removed14 instanceof Array);
235
235
  expect(removed14[0]);
236
236
  expect(removed14[0].deleted);
@@ -331,13 +331,13 @@ 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(9, node => node.value);
334
+ const nodeVal9 = treeMultimap.getNode(node => node.value === 9);
335
335
  expect(nodeVal9?.key).toBe(9);
336
336
 
337
- const nodesByCount1 = treeMultimap.getNodes(1, node => node.count);
337
+ const nodesByCount1 = treeMultimap.getNodes(node => node.count === 1);
338
338
  expect(nodesByCount1.length).toBe(14);
339
339
 
340
- const nodesByCount2 = treeMultimap.getNodes(2, node => node.count);
340
+ const nodesByCount2 = treeMultimap.getNodes(node => node.count === 2);
341
341
  expect(nodesByCount2.length).toBe(2);
342
342
  const leftMost = treeMultimap.getLeftMost();
343
343
  expect(leftMost).toBe(1);
@@ -347,7 +347,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
347
347
  expect(minNodeBySpecificNode?.key).toBe(15);
348
348
 
349
349
  let subTreeSum = 0;
350
- node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'PRE', 15);
350
+ if (node15) treeMultimap.dfs(node => (subTreeSum += node.key), 'PRE', 15);
351
351
  expect(subTreeSum).toBe(31);
352
352
  let lesserSum = 0;
353
353
  treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), -1, 10);
@@ -379,7 +379,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
379
379
  expect(bfsNodesAfterBalanced[0].key).toBe(8);
380
380
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
381
381
 
382
- const removed11 = treeMultimap.delete(11, undefined, true);
382
+ const removed11 = treeMultimap.delete(11, true);
383
383
  expect(removed11 instanceof Array);
384
384
  expect(removed11[0]);
385
385
  expect(removed11[0].deleted);
@@ -390,7 +390,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
390
390
 
391
391
  expect(treeMultimap.getHeight(15)).toBe(1);
392
392
 
393
- const removed1 = treeMultimap.delete(1, undefined, true);
393
+ const removed1 = treeMultimap.delete(1, true);
394
394
  expect(removed1 instanceof Array);
395
395
  expect(removed1[0]);
396
396
  expect(removed1[0].deleted);
@@ -400,7 +400,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
400
400
 
401
401
  expect(treeMultimap.getHeight()).toBe(4);
402
402
 
403
- const removed4 = treeMultimap.delete(4, undefined, true);
403
+ const removed4 = treeMultimap.delete(4, true);
404
404
  expect(removed4 instanceof Array);
405
405
  expect(removed4[0]);
406
406
  expect(removed4[0].deleted);
@@ -409,7 +409,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
409
409
  expect(treeMultimap.isAVLBalanced()).toBe(true);
410
410
  expect(treeMultimap.getHeight()).toBe(4);
411
411
 
412
- const removed10 = treeMultimap.delete(10, undefined, true);
412
+ const removed10 = treeMultimap.delete(10, true);
413
413
  expect(removed10 instanceof Array);
414
414
  expect(removed10[0]);
415
415
  expect(removed10[0].deleted);
@@ -418,7 +418,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
418
418
 
419
419
  expect(treeMultimap.getHeight()).toBe(3);
420
420
 
421
- const removed15 = treeMultimap.delete(15, undefined, true);
421
+ const removed15 = treeMultimap.delete(15, true);
422
422
  expect(removed15 instanceof Array);
423
423
  expect(removed15[0]);
424
424
  expect(removed15[0].deleted);
@@ -427,7 +427,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
427
427
  expect(treeMultimap.isAVLBalanced()).toBe(true);
428
428
  expect(treeMultimap.getHeight()).toBe(3);
429
429
 
430
- const removed5 = treeMultimap.delete(5, undefined, true);
430
+ const removed5 = treeMultimap.delete(5, true);
431
431
  expect(removed5 instanceof Array);
432
432
  expect(removed5[0]);
433
433
  expect(removed5[0].deleted);
@@ -436,7 +436,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
436
436
  expect(treeMultimap.isAVLBalanced()).toBe(true);
437
437
  expect(treeMultimap.getHeight()).toBe(3);
438
438
 
439
- const removed13 = treeMultimap.delete(13, undefined, true);
439
+ const removed13 = treeMultimap.delete(13, true);
440
440
  expect(removed13 instanceof Array);
441
441
  expect(removed13[0]);
442
442
  expect(removed13[0].deleted);
@@ -444,7 +444,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
444
444
  expect(treeMultimap.isAVLBalanced()).toBe(true);
445
445
  expect(treeMultimap.getHeight()).toBe(3);
446
446
 
447
- const removed3 = treeMultimap.delete(3, undefined, true);
447
+ const removed3 = treeMultimap.delete(3, true);
448
448
  expect(removed3 instanceof Array);
449
449
  expect(removed3[0]);
450
450
  expect(removed3[0].deleted);
@@ -452,7 +452,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
452
452
  expect(treeMultimap.isAVLBalanced()).toBe(true);
453
453
  expect(treeMultimap.getHeight()).toBe(3);
454
454
 
455
- const removed8 = treeMultimap.delete(8, undefined, true);
455
+ const removed8 = treeMultimap.delete(8, true);
456
456
  expect(removed8 instanceof Array);
457
457
  expect(removed8[0]);
458
458
  expect(removed8[0].deleted);
@@ -460,17 +460,17 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
460
460
  expect(treeMultimap.isAVLBalanced()).toBe(true);
461
461
  expect(treeMultimap.getHeight()).toBe(3);
462
462
 
463
- const removed6 = treeMultimap.delete(6, undefined, true);
463
+ const removed6 = treeMultimap.delete(6, true);
464
464
  expect(removed6 instanceof Array);
465
465
  expect(removed6[0]);
466
466
  expect(removed6[0].deleted);
467
467
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
468
- expect(treeMultimap.delete(6, undefined, true).length).toBe(0);
468
+ expect(treeMultimap.delete(6, true).length).toBe(0);
469
469
  expect(treeMultimap.isAVLBalanced()).toBe(true);
470
470
 
471
471
  expect(treeMultimap.getHeight()).toBe(2);
472
472
 
473
- const removed7 = treeMultimap.delete(7, undefined, true);
473
+ const removed7 = treeMultimap.delete(7, true);
474
474
  expect(removed7 instanceof Array);
475
475
  expect(removed7[0]);
476
476
  expect(removed7[0].deleted);
@@ -478,7 +478,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
478
478
  expect(treeMultimap.isAVLBalanced()).toBe(true);
479
479
  expect(treeMultimap.getHeight()).toBe(2);
480
480
 
481
- const removed9 = treeMultimap.delete(9, undefined, true);
481
+ const removed9 = treeMultimap.delete(9, true);
482
482
  expect(removed9 instanceof Array);
483
483
  expect(removed9[0]);
484
484
  expect(removed9[0].deleted);
@@ -486,7 +486,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
486
486
  expect(treeMultimap.isAVLBalanced()).toBe(true);
487
487
  expect(treeMultimap.getHeight()).toBe(2);
488
488
 
489
- const removed14 = treeMultimap.delete(14, undefined, true);
489
+ const removed14 = treeMultimap.delete(14, true);
490
490
  expect(removed14 instanceof Array);
491
491
  expect(removed14[0]);
492
492
  expect(removed14[0].deleted);
@@ -556,7 +556,7 @@ describe('AVLTreeMultiMap Performance test', function () {
556
556
  it(`Observe the time consumption of AVLTreeMultiMap.dfs be good`, function () {
557
557
  const startDFS = performance.now();
558
558
  const dfs = treeMS.dfs(node => node);
559
- isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
559
+ if (isDebug) console.log('---bfs', performance.now() - startDFS, dfs.length);
560
560
  });
561
561
 
562
562
  it('Should the time consumption of lesserOrGreaterTraverse fitting O(n log n)', function () {
@@ -564,10 +564,10 @@ describe('AVLTreeMultiMap Performance test', function () {
564
564
  for (let i = 0; i < inputSize; i++) {
565
565
  treeMS.add(i);
566
566
  }
567
- isDebug && console.log('---add', performance.now() - start);
567
+ if (isDebug) console.log('---add', performance.now() - start);
568
568
  const startL = performance.now();
569
569
  treeMS.lesserOrGreaterTraverse(node => (node.count += 1), -1, inputSize / 2);
570
- isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
570
+ if (isDebug) console.log('---lesserOrGreaterTraverse', performance.now() - startL);
571
571
  });
572
572
 
573
573
  it('should the clone method', () => {
@@ -24,7 +24,7 @@ describe('AVL Tree Test', () => {
24
24
  expect(getMinNodeBySpecificNode?.key).toBe(12);
25
25
 
26
26
  let subTreeSum = 0;
27
- node15 && tree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
27
+ if (node15) tree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
28
28
  expect(subTreeSum).toBe(70);
29
29
 
30
30
  let lesserSum = 0;
@@ -132,7 +132,7 @@ describe('AVL Tree Test recursively', () => {
132
132
  expect(getMinNodeBySpecificNode?.key).toBe(12);
133
133
 
134
134
  let subTreeSum = 0;
135
- node15 && tree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
135
+ if (node15) tree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
136
136
  expect(subTreeSum).toBe(70);
137
137
 
138
138
  let lesserSum = 0;
@@ -169,8 +169,8 @@ describe('BinaryTree', () => {
169
169
  expect(tree.has(4)).toBe(false);
170
170
  const node4 = tree.getNode(4);
171
171
  expect(tree.has(node4)).toBe(false);
172
- expect(tree.has(node4, node => node)).toBe(false);
173
- expect(tree.has('3', node => node.value?.toString())).toBe(true);
172
+ expect(tree.has(node => node === node4)).toBe(false);
173
+ expect(tree.has(node => node.value?.toString() === '3')).toBe(true);
174
174
  });
175
175
 
176
176
  it('should the clone method work fine', () => {
@@ -296,8 +296,9 @@ describe('BinaryTree', () => {
296
296
  });
297
297
 
298
298
  it('should isSubtreeBST', () => {
299
+ expect(tree.toVisual()).toBe('');
299
300
  tree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
300
- expect(tree.print()).toBe(
301
+ expect(tree.toVisual()).toBe(
301
302
  ' ___4___ \n' +
302
303
  ' / \\ \n' +
303
304
  ' _2_ _6_ \n' +
@@ -305,12 +306,26 @@ describe('BinaryTree', () => {
305
306
  ' 1 3 5 7 \n' +
306
307
  ' \n'
307
308
  );
309
+ const visualized = tree.toVisual(undefined, { isShowUndefined: true, isShowNull: true, isShowRedBlackNIL: true });
310
+ expect(visualized).toBe(
311
+ 'U for undefined\n' +
312
+ ' N for null\n' +
313
+ ' S for Sentinel Node(NIL)\n' +
314
+ ' _______4_______ \n' +
315
+ ' / \\ \n' +
316
+ ' ___2___ ___6___ \n' +
317
+ ' / \\ / \\ \n' +
318
+ ' _1_ _3_ _5_ _7_ \n' +
319
+ ' / \\ / \\ / \\ / \\ \n' +
320
+ ' U U U U U U U U \n' +
321
+ ' \n'
322
+ );
308
323
 
309
324
  expect(tree.isBST(tree.getNode(4), 'RECURSIVE')).toBe(true);
310
325
  expect(tree.isBST(tree.getNode(4), 'ITERATIVE')).toBe(true);
311
- expect(tree.getNodes(2, undefined, false, null)).toEqual([]);
326
+ expect(tree.getNodes(2, false, null)).toEqual([]);
312
327
  expect(tree.getNodes(undefined)).toEqual([]);
313
- expect(tree.getNodes(tree.getNodeByKey(2), undefined, false, tree.root)).toEqual([tree.getNodeByKey(2)]);
328
+ expect(tree.getNodes(tree.getNodeByKey(2), false, tree.root)).toEqual([tree.getNodeByKey(2)]);
314
329
  });
315
330
 
316
331
  describe('should isKey', () => {
@@ -472,13 +487,20 @@ describe('BinaryTree', () => {
472
487
  });
473
488
 
474
489
  it('should isLeaf', () => {
490
+ expect(tree.getLeftMost()).toBe(undefined);
491
+ expect(tree.getRightMost()).toBe(undefined);
475
492
  tree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
476
493
  const leftMost = tree.getLeftMost();
477
494
  expect(tree.isLeaf(leftMost)).toBe(true);
478
495
  expect(tree.isLeaf(null)).toBe(true);
496
+ const rightMost = tree.getRightMost();
497
+ expect(tree.isLeaf(rightMost)).toBe(true);
498
+ expect(tree.isLeaf(null)).toBe(true);
479
499
  });
480
500
 
481
501
  it('should tree traverse', () => {
502
+ expect(tree.dfs()).toEqual([]);
503
+ expect([...tree.values()]).toEqual([]);
482
504
  tree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
483
505
  expect(tree.dfs(node => node.key, 'PRE', undefined, 'ITERATIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
484
506
  expect(tree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', false)).toEqual([
@@ -666,6 +688,7 @@ describe('BinaryTree', () => {
666
688
 
667
689
  it('should duplicated nodes just replace the node exists', function () {
668
690
  tree.clear();
691
+ expect(tree.bfs()).toEqual([]);
669
692
  tree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
670
693
 
671
694
  expect(tree.bfs(node => (node ? node.key : null), undefined, undefined, true)).toEqual([
@@ -848,110 +871,102 @@ describe('BinaryTree toEntryFn', () => {
848
871
  });
849
872
 
850
873
  describe('BinaryTree traversals', () => {
851
- const tree = new BinaryTree<number>();
874
+ it('traversals', () => {
875
+ const tree = new BinaryTree<number>();
876
+
877
+ const arr = [35, 20, 40, 15, 29, null, 50, null, 16, 28, 30, 45, 55];
878
+ tree.refill(arr);
879
+ expect(tree.bfs(node => node, tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
880
+ 35,
881
+ 20,
882
+ 40,
883
+ 15,
884
+ 29,
885
+ null,
886
+ 50,
887
+ null,
888
+ 16,
889
+ 28,
890
+ 30,
891
+ 45,
892
+ 55
893
+ ]);
894
+ expect(tree.bfs(node => node, tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
895
+ 35,
896
+ 20,
897
+ 40,
898
+ 15,
899
+ 29,
900
+ null,
901
+ 50,
902
+ null,
903
+ 16,
904
+ 28,
905
+ 30,
906
+ 45,
907
+ 55
908
+ ]);
909
+ expect(tree.bfs(node => node, tree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual([
910
+ 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
911
+ ]);
912
+ expect(tree.bfs(node => node, tree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual([
913
+ 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
914
+ ]);
915
+
916
+ expect(tree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
917
+ expect(tree.dfs(node => node.key, 'PRE', tree.root, 'RECURSIVE')).toEqual([
918
+ 35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
919
+ ]);
920
+ expect(
921
+ tree.dfs(node => node, 'PRE', tree.root, 'ITERATIVE', true).map(node => (node === null ? null : node.key))
922
+ ).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
923
+ expect(tree.dfs(node => node, 'PRE', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
924
+ 35,
925
+ 20,
926
+ 15,
927
+ null,
928
+ 16,
929
+ 29,
930
+ 28,
931
+ 30,
932
+ 40,
933
+ null,
934
+ 50,
935
+ 45,
936
+ 55
937
+ ]);
938
+
939
+ expect(tree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
940
+ expect(tree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
941
+ expect(tree.dfs(node => node.key, 'POST', tree.root, 'RECURSIVE')).toEqual([
942
+ 16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
943
+ ]);
944
+ expect(tree.bfs(node => node.key, tree.root, 'RECURSIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
945
+ expect(tree.bfs(node => node.key, tree.root, 'ITERATIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
946
+
947
+ expect(tree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
852
948
 
853
- const arr = [35, 20, 40, 15, 29, null, 50, null, 16, 28, 30, 45, 55];
854
- tree.refill(arr);
855
- expect(tree.bfs(node => node, tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
856
- 35,
857
- 20,
858
- 40,
859
- 15,
860
- 29,
861
- null,
862
- 50,
863
- null,
864
- 16,
865
- 28,
866
- 30,
867
- 45,
868
- 55
869
- ]);
870
- expect(tree.bfs(node => node, tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
871
- 35,
872
- 20,
873
- 40,
874
- 15,
875
- 29,
876
- null,
877
- 50,
878
- null,
879
- 16,
880
- 28,
881
- 30,
882
- 45,
883
- 55
884
- ]);
885
- expect(tree.bfs(node => node, tree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual([
886
- 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
887
- ]);
888
- expect(tree.bfs(node => node, tree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual([
889
- 35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
890
- ]);
891
-
892
- expect(tree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
893
- expect(tree.dfs(node => node.key, 'PRE', tree.root, 'RECURSIVE')).toEqual([
894
- 35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
895
- ]);
896
- expect(tree.dfs(node => node, 'PRE', tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
897
- 35,
898
- 20,
899
- 15,
900
- null,
901
- 16,
902
- 29,
903
- 28,
904
- 30,
905
- 40,
906
- null,
907
- 50,
908
- 45,
909
- 55
910
- ]);
911
- expect(tree.dfs(node => node, 'PRE', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
912
- 35,
913
- 20,
914
- 15,
915
- null,
916
- 16,
917
- 29,
918
- 28,
919
- 30,
920
- 40,
921
- null,
922
- 50,
923
- 45,
924
- 55
925
- ]);
926
-
927
- expect(tree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
928
- expect(tree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
929
- expect(tree.dfs(node => node.key, 'POST', tree.root, 'RECURSIVE')).toEqual([
930
- 16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
931
- ]);
932
- expect(tree.bfs(node => node.key, tree.root, 'RECURSIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
933
- expect(tree.bfs(node => node.key, tree.root, 'ITERATIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
934
-
935
- expect(tree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
936
-
937
- expect(tree.listLevels(node => node.key, tree.root, 'RECURSIVE')).toEqual([
938
- [35],
939
- [20, 40],
940
- [15, 29, 50],
941
- [16, 28, 30, 45, 55]
942
- ]);
943
- expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'ITERATIVE', true)).toEqual([
944
- [35],
945
- [20, 40],
946
- [15, 29, null, 50],
947
- [null, 16, 28, 30, 45, 55]
948
- ]);
949
- expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'RECURSIVE', true)).toEqual([
950
- [35],
951
- [20, 40],
952
- [15, 29, null, 50],
953
- [null, 16, 28, 30, 45, 55]
954
- ]);
949
+ expect(tree.listLevels(node => node.key, tree.root, 'RECURSIVE')).toEqual([
950
+ [35],
951
+ [20, 40],
952
+ [15, 29, 50],
953
+ [16, 28, 30, 45, 55]
954
+ ]);
955
+ expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'ITERATIVE', true)).toEqual([
956
+ [35],
957
+ [20, 40],
958
+ [15, 29, null, 50],
959
+ [null, 16, 28, 30, 45, 55]
960
+ ]);
961
+ expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'RECURSIVE', true)).toEqual([
962
+ [35],
963
+ [20, 40],
964
+ [15, 29, null, 50],
965
+ [null, 16, 28, 30, 45, 55]
966
+ ]);
967
+ tree.clear();
968
+ expect(tree.listLevels()).toEqual([]);
969
+ });
955
970
  });
956
971
 
957
972
  describe('BinaryTree', () => {
@@ -1027,6 +1042,7 @@ describe('BinaryTree', () => {
1027
1042
  });
1028
1043
 
1029
1044
  it('should get the height of the tree', () => {
1045
+ expect(tree.getMinHeight()).toBe(-1);
1030
1046
  tree.add([5, 'A']);
1031
1047
  tree.add(3, 'B');
1032
1048
  tree.add([7, 'C']);
@@ -1085,6 +1101,15 @@ describe('BinaryTree', () => {
1085
1101
  expect(tree.getNode(3)).toBe(null);
1086
1102
  });
1087
1103
 
1104
+ it('should getPathToRoot', () => {
1105
+ tree.add([5, 'A']);
1106
+ tree.add([3, 'B']);
1107
+ tree.add([7, 'C']);
1108
+
1109
+ expect(tree.getPathToRoot(undefined, 7)).toEqual([5, 7]);
1110
+ expect(tree.getPathToRoot(undefined, 1)).toEqual([]);
1111
+ });
1112
+
1088
1113
  it('should check if the tree is perfectly balanced', () => {
1089
1114
  tree.add([5, 'A']);
1090
1115
  tree.add([3, 'B']);
@@ -1105,17 +1130,17 @@ describe('BinaryTree', () => {
1105
1130
  tree.add([2, 'B']);
1106
1131
  tree.add([null, 'null']);
1107
1132
 
1108
- const nodes = tree.getNodes('B', node => node.value);
1133
+ const nodes = tree.getNodes(node => node.value === 'B');
1109
1134
 
1110
1135
  expect(nodes.length).toBe(1);
1111
1136
  expect(nodes[0].key).toBe(2);
1112
1137
 
1113
- const nodesRec = tree.getNodes('B', node => node.value, false, tree.root, 'RECURSIVE');
1138
+ const nodesRec = tree.getNodes(node => node.value === 'B', false, tree.root, 'RECURSIVE');
1114
1139
 
1115
1140
  expect(nodesRec.length).toBe(1);
1116
1141
  expect(nodesRec[0].key).toBe(2);
1117
1142
 
1118
- const nodesItr = tree.getNodes('B', node => node.value, false, tree.root, 'ITERATIVE');
1143
+ const nodesItr = tree.getNodes(node => node.value === 'B', false, tree.root, 'ITERATIVE');
1119
1144
 
1120
1145
  expect(nodesItr.length).toBe(1);
1121
1146
  expect(nodesItr[0].key).toBe(2);
@@ -1144,7 +1169,8 @@ describe('BinaryTree', () => {
1144
1169
 
1145
1170
  const result = tree.morris();
1146
1171
  expect(result).toEqual([3, 5, 7]);
1147
- // Add assertions for the result of Morris traversal
1172
+ tree.clear();
1173
+ expect(tree.morris()).toEqual([]);
1148
1174
  });
1149
1175
 
1150
1176
  it('should perform delete all', () => {
@@ -1243,6 +1269,8 @@ describe('BinaryTree iterative methods test', () => {
1243
1269
  it('should leaves', () => {
1244
1270
  const leaves = binaryTree.leaves();
1245
1271
  expect(leaves).toEqual([2, 3]);
1272
+ binaryTree.clear();
1273
+ expect(binaryTree.leaves()).toEqual([]);
1246
1274
  });
1247
1275
 
1248
1276
  it('should iterative method return undefined when the node is null', () => {