data-structure-typed 1.52.6 → 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 (178) 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 +668 -597
  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/trie/trie.d.ts +2 -2
  64. package/dist/cjs/data-structures/trie/trie.js +1 -1
  65. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  66. package/dist/cjs/index.d.ts +1 -0
  67. package/dist/cjs/index.js +1 -0
  68. package/dist/cjs/index.js.map +1 -1
  69. package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
  70. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
  71. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js +0 -6
  72. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js.map +1 -1
  73. package/dist/mjs/constants/index.d.ts +4 -0
  74. package/dist/mjs/constants/index.js +5 -0
  75. package/dist/mjs/data-structures/base/iterable-element-base.d.ts +8 -1
  76. package/dist/mjs/data-structures/base/iterable-element-base.js +10 -1
  77. package/dist/mjs/data-structures/base/iterable-entry-base.d.ts +8 -1
  78. package/dist/mjs/data-structures/base/iterable-entry-base.js +10 -10
  79. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +31 -32
  80. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +44 -44
  81. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +23 -24
  82. package/dist/mjs/data-structures/binary-tree/avl-tree.js +72 -64
  83. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js +2 -2
  84. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +534 -402
  85. package/dist/mjs/data-structures/binary-tree/binary-tree.js +667 -591
  86. package/dist/mjs/data-structures/binary-tree/bst.d.ts +72 -65
  87. package/dist/mjs/data-structures/binary-tree/bst.js +116 -112
  88. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +21 -24
  89. package/dist/mjs/data-structures/binary-tree/rb-tree.js +41 -38
  90. package/dist/mjs/data-structures/binary-tree/segment-tree.d.ts +2 -2
  91. package/dist/mjs/data-structures/binary-tree/segment-tree.js +2 -2
  92. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +28 -31
  93. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +45 -42
  94. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +2 -2
  95. package/dist/mjs/data-structures/graph/abstract-graph.js +7 -4
  96. package/dist/mjs/data-structures/graph/directed-graph.d.ts +2 -2
  97. package/dist/mjs/data-structures/graph/directed-graph.js +4 -2
  98. package/dist/mjs/data-structures/graph/undirected-graph.d.ts +2 -2
  99. package/dist/mjs/data-structures/hash/hash-map.d.ts +2 -2
  100. package/dist/mjs/data-structures/hash/hash-map.js +1 -1
  101. package/dist/mjs/data-structures/heap/heap.js +3 -3
  102. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  103. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +7 -7
  104. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  105. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +6 -6
  106. package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
  107. package/dist/mjs/data-structures/matrix/matrix.d.ts +2 -2
  108. package/dist/mjs/data-structures/matrix/navigator.d.ts +2 -2
  109. package/dist/mjs/data-structures/matrix/navigator.js +4 -2
  110. package/dist/mjs/data-structures/queue/deque.d.ts +3 -3
  111. package/dist/mjs/data-structures/queue/deque.js +29 -29
  112. package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
  113. package/dist/mjs/data-structures/stack/stack.d.ts +2 -2
  114. package/dist/mjs/data-structures/trie/trie.d.ts +2 -2
  115. package/dist/mjs/data-structures/trie/trie.js +1 -1
  116. package/dist/mjs/index.d.ts +1 -0
  117. package/dist/mjs/index.js +1 -0
  118. package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
  119. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
  120. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +1 -5
  121. package/dist/umd/data-structure-typed.js +1343 -1615
  122. package/dist/umd/data-structure-typed.min.js +10 -3
  123. package/dist/umd/data-structure-typed.min.js.map +1 -1
  124. package/eslint.config.mjs +69 -0
  125. package/package.json +30 -28
  126. package/src/constants/index.ts +4 -0
  127. package/src/data-structures/base/iterable-element-base.ts +11 -1
  128. package/src/data-structures/base/iterable-entry-base.ts +11 -19
  129. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +47 -50
  130. package/src/data-structures/binary-tree/avl-tree.ts +69 -71
  131. package/src/data-structures/binary-tree/binary-indexed-tree.ts +2 -2
  132. package/src/data-structures/binary-tree/binary-tree.ts +697 -725
  133. package/src/data-structures/binary-tree/bst.ts +123 -129
  134. package/src/data-structures/binary-tree/rb-tree.ts +44 -46
  135. package/src/data-structures/binary-tree/segment-tree.ts +2 -2
  136. package/src/data-structures/binary-tree/tree-multi-map.ts +48 -49
  137. package/src/data-structures/graph/abstract-graph.ts +6 -6
  138. package/src/data-structures/graph/directed-graph.ts +4 -4
  139. package/src/data-structures/graph/undirected-graph.ts +2 -2
  140. package/src/data-structures/hash/hash-map.ts +3 -3
  141. package/src/data-structures/heap/heap.ts +3 -3
  142. package/src/data-structures/linked-list/doubly-linked-list.ts +9 -9
  143. package/src/data-structures/linked-list/singly-linked-list.ts +8 -8
  144. package/src/data-structures/linked-list/skip-linked-list.ts +2 -2
  145. package/src/data-structures/matrix/matrix.ts +2 -2
  146. package/src/data-structures/matrix/navigator.ts +4 -4
  147. package/src/data-structures/queue/deque.ts +31 -31
  148. package/src/data-structures/queue/queue.ts +1 -1
  149. package/src/data-structures/stack/stack.ts +2 -2
  150. package/src/data-structures/trie/trie.ts +3 -3
  151. package/src/index.ts +1 -0
  152. package/src/interfaces/binary-tree.ts +3 -3
  153. package/src/types/data-structures/binary-tree/binary-tree.ts +3 -5
  154. package/test/config.ts +1 -7
  155. package/test/integration/all-in-one.test.ts +2 -2
  156. package/test/integration/avl-tree.test.ts +2 -2
  157. package/test/integration/bst.test.ts +17 -16
  158. package/test/integration/heap.test.js +6 -1
  159. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +39 -39
  160. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
  161. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +51 -26
  162. package/test/unit/data-structures/binary-tree/bst.test.ts +41 -13
  163. package/test/unit/data-structures/binary-tree/overall.test.ts +0 -6
  164. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +6 -6
  165. package/test/unit/data-structures/binary-tree/segment-tree.test.ts +88 -34
  166. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +42 -42
  167. package/test/unit/data-structures/graph/abstract-graph.test.ts +1 -1
  168. package/test/unit/data-structures/graph/directed-graph.test.ts +4 -4
  169. package/test/unit/data-structures/graph/undirected-graph.test.ts +14 -2
  170. package/test/unit/data-structures/hash/hash-map.test.ts +1 -1
  171. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +1 -1
  172. package/test/unit/data-structures/matrix/navigator.test.ts +2 -2
  173. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -1
  174. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +4 -4
  175. package/test/unit/data-structures/stack/stack.test.ts +6 -0
  176. package/test/unit/unrestricted-interconversion.test.ts +24 -24
  177. package/test/utils/big-o.ts +5 -4
  178. 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([
@@ -894,21 +917,9 @@ describe('BinaryTree traversals', () => {
894
917
  expect(tree.dfs(node => node.key, 'PRE', tree.root, 'RECURSIVE')).toEqual([
895
918
  35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
896
919
  ]);
897
- expect(tree.dfs(node => node, 'PRE', tree.root, 'ITERATIVE', true).map(node => (node === null ? null : node.key))).toEqual([
898
- 35,
899
- 20,
900
- 15,
901
- null,
902
- 16,
903
- 29,
904
- 28,
905
- 30,
906
- 40,
907
- null,
908
- 50,
909
- 45,
910
- 55
911
- ]);
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]);
912
923
  expect(tree.dfs(node => node, 'PRE', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
913
924
  35,
914
925
  20,
@@ -953,8 +964,9 @@ describe('BinaryTree traversals', () => {
953
964
  [15, 29, null, 50],
954
965
  [null, 16, 28, 30, 45, 55]
955
966
  ]);
956
- })
957
-
967
+ tree.clear();
968
+ expect(tree.listLevels()).toEqual([]);
969
+ });
958
970
  });
959
971
 
960
972
  describe('BinaryTree', () => {
@@ -1030,6 +1042,7 @@ describe('BinaryTree', () => {
1030
1042
  });
1031
1043
 
1032
1044
  it('should get the height of the tree', () => {
1045
+ expect(tree.getMinHeight()).toBe(-1);
1033
1046
  tree.add([5, 'A']);
1034
1047
  tree.add(3, 'B');
1035
1048
  tree.add([7, 'C']);
@@ -1088,6 +1101,15 @@ describe('BinaryTree', () => {
1088
1101
  expect(tree.getNode(3)).toBe(null);
1089
1102
  });
1090
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
+
1091
1113
  it('should check if the tree is perfectly balanced', () => {
1092
1114
  tree.add([5, 'A']);
1093
1115
  tree.add([3, 'B']);
@@ -1108,17 +1130,17 @@ describe('BinaryTree', () => {
1108
1130
  tree.add([2, 'B']);
1109
1131
  tree.add([null, 'null']);
1110
1132
 
1111
- const nodes = tree.getNodes('B', node => node.value);
1133
+ const nodes = tree.getNodes(node => node.value === 'B');
1112
1134
 
1113
1135
  expect(nodes.length).toBe(1);
1114
1136
  expect(nodes[0].key).toBe(2);
1115
1137
 
1116
- 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');
1117
1139
 
1118
1140
  expect(nodesRec.length).toBe(1);
1119
1141
  expect(nodesRec[0].key).toBe(2);
1120
1142
 
1121
- 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');
1122
1144
 
1123
1145
  expect(nodesItr.length).toBe(1);
1124
1146
  expect(nodesItr[0].key).toBe(2);
@@ -1147,7 +1169,8 @@ describe('BinaryTree', () => {
1147
1169
 
1148
1170
  const result = tree.morris();
1149
1171
  expect(result).toEqual([3, 5, 7]);
1150
- // Add assertions for the result of Morris traversal
1172
+ tree.clear();
1173
+ expect(tree.morris()).toEqual([]);
1151
1174
  });
1152
1175
 
1153
1176
  it('should perform delete all', () => {
@@ -1246,6 +1269,8 @@ describe('BinaryTree iterative methods test', () => {
1246
1269
  it('should leaves', () => {
1247
1270
  const leaves = binaryTree.leaves();
1248
1271
  expect(leaves).toEqual([2, 3]);
1272
+ binaryTree.clear();
1273
+ expect(binaryTree.leaves()).toEqual([]);
1249
1274
  });
1250
1275
 
1251
1276
  it('should iterative method return undefined when the node is null', () => {
@@ -69,7 +69,7 @@ describe('BST operations test', () => {
69
69
  const nodeId10 = bst.getNode(10);
70
70
  expect(nodeId10?.key).toBe(10);
71
71
 
72
- const nodeVal9 = bst.getNode(9, node => node.value);
72
+ const nodeVal9 = bst.getNode(node => node.value === 9);
73
73
  expect(nodeVal9?.key).toBe(9);
74
74
 
75
75
  const leftMost = bst.getLeftMost();
@@ -81,8 +81,11 @@ describe('BST operations test', () => {
81
81
  const minNodeBySpecificNode = node15 && bst.getLeftMost(node => node, node15);
82
82
  expect(minNodeBySpecificNode?.key).toBe(12);
83
83
 
84
+ const nodes = bst.getNodes(node => node.value === 15);
85
+ expect(nodes.map(node => node.key)).toEqual([15]);
86
+
84
87
  let subTreeSum = 0;
85
- node15 && bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
88
+ if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
86
89
  expect(subTreeSum).toBe(70);
87
90
 
88
91
  let lesserSum = 0;
@@ -231,6 +234,9 @@ describe('BST operations test', () => {
231
234
  expect(bfsNodes[0].key).toBe(2);
232
235
  expect(bfsNodes[1].key).toBe(12);
233
236
  expect(bfsNodes[2].key).toBe(16);
237
+ bst.clear();
238
+ expect(bst.perfectlyBalance()).toBe(false);
239
+ expect(bst.isAVLBalanced()).toBe(true);
234
240
  });
235
241
 
236
242
  it('should perform various operations on a Binary Search Tree with object values', () => {
@@ -288,7 +294,7 @@ describe('BST operations test', () => {
288
294
  expect(minNodeBySpecificNode?.key).toBe(12);
289
295
 
290
296
  let subTreeSum = 0;
291
- node15 && objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
297
+ if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
292
298
  expect(subTreeSum).toBe(70);
293
299
 
294
300
  let lesserSum = 0;
@@ -484,7 +490,7 @@ describe('BST operations test recursively', () => {
484
490
  expect(bst.get(10)).toBe(undefined);
485
491
  expect(nodeId10?.key).toBe(10);
486
492
 
487
- const nodeVal9 = bst.getNode(9, node => node.value);
493
+ const nodeVal9 = bst.getNode(node => node.value === 9);
488
494
  expect(nodeVal9?.key).toBe(undefined);
489
495
 
490
496
  const leftMost = bst.getLeftMost();
@@ -495,7 +501,7 @@ describe('BST operations test recursively', () => {
495
501
  expect(minNodeBySpecificNode?.key).toBe(12);
496
502
 
497
503
  let subTreeSum = 0;
498
- node15 && bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
504
+ if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
499
505
  expect(subTreeSum).toBe(70);
500
506
 
501
507
  let lesserSum = 0;
@@ -702,7 +708,7 @@ describe('BST operations test recursively', () => {
702
708
  expect(minNodeBySpecificNode?.key).toBe(12);
703
709
 
704
710
  let subTreeSum = 0;
705
- node15 && objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
711
+ if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
706
712
  expect(subTreeSum).toBe(70);
707
713
 
708
714
  let lesserSum = 0;
@@ -869,6 +875,28 @@ describe('BST operations test recursively', () => {
869
875
  expect(numBST.size).toBe(0);
870
876
  });
871
877
 
878
+ it('should listLevels', () => {
879
+ const bst = new BST<number>();
880
+ bst.addMany([2, 4, 5, 3, 1]);
881
+ expect(bst.size).toBe(5);
882
+ bst.delete(1);
883
+ bst.delete(5);
884
+ const levelKeys = bst.listLevels();
885
+ expect(levelKeys).toEqual([[3], [2, 4]]);
886
+ });
887
+
888
+ it('should lesserOrGreaterTraverse', () => {
889
+ const bst = new BST<number>();
890
+ const levelKeys = bst.lesserOrGreaterTraverse();
891
+ expect(levelKeys).toEqual([]);
892
+ bst.addMany([2, 4, 5, 3, 1]);
893
+ expect(bst.size).toBe(5);
894
+ bst.delete(1);
895
+ bst.delete(5);
896
+ const levelKeys1 = bst.lesserOrGreaterTraverse();
897
+ expect(levelKeys1).toEqual([2]);
898
+ });
899
+
872
900
  it('should the clone method', () => {
873
901
  function checkTreeStructure(bst: BST<string, number>) {
874
902
  expect(bst.size).toBe(4);
@@ -972,7 +1000,7 @@ describe('BST Performance test', function () {
972
1000
  it(`Observe the time consumption of BST.dfs be good`, function () {
973
1001
  const startDFS = performance.now();
974
1002
  const dfs = bst.dfs(node => node);
975
- isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
1003
+ if (isDebug) console.log('---bfs', performance.now() - startDFS, dfs.length);
976
1004
  });
977
1005
 
978
1006
  it('Should the time consumption of lesserOrGreaterTraverse fitting O(n log n)', function () {
@@ -982,16 +1010,16 @@ describe('BST Performance test', function () {
982
1010
  }
983
1011
  const start = performance.now();
984
1012
  bst.addMany(nodes);
985
- isDebug && console.log('---add', performance.now() - start);
1013
+ if (isDebug) console.log('---add', performance.now() - start);
986
1014
  const startL = performance.now();
987
1015
  bst.lesserOrGreaterTraverse(
988
1016
  node => {
989
- node.key - 1;
1017
+ node.key -= 1;
990
1018
  },
991
1019
  -1,
992
1020
  inputSize / 2
993
1021
  );
994
- isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
1022
+ if (isDebug) console.log('---lesserOrGreaterTraverse', performance.now() - startL);
995
1023
  });
996
1024
 
997
1025
  it('Should the time consumption of listLevels fitting well', function () {
@@ -1001,11 +1029,11 @@ describe('BST Performance test', function () {
1001
1029
  }
1002
1030
  const start = performance.now();
1003
1031
  bst.addMany(nodes);
1004
- isDebug && console.log('---add', performance.now() - start);
1032
+ if (isDebug) console.log('---add', performance.now() - start);
1005
1033
  const startL = performance.now();
1006
1034
  const arr: number[][] = bst.listLevels(node => node.key);
1007
- isDebug && console.log('---listLevels', arr);
1008
- isDebug && console.log('---listLevels', performance.now() - startL);
1035
+ if (isDebug) console.log('---listLevels', arr);
1036
+ if (isDebug) console.log('---listLevels', performance.now() - startL);
1009
1037
  });
1010
1038
 
1011
1039
  it('should the lastKey of a BST to be the largest key', function () {
@@ -6,18 +6,13 @@ describe('Overall BinaryTree Test', () => {
6
6
  bst.add(11);
7
7
  bst.add(3);
8
8
  bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], undefined, false);
9
- bst.size === 16; // true
10
9
  expect(bst.size).toBe(16); // true
11
10
  bst.has(6); // true
12
11
  expect(bst.has(6)).toBe(true); // true
13
- bst.getHeight(6) === 2; // true
14
- bst.getHeight() === 5; // true
15
- bst.getDepth(6) === 3; // true
16
12
  expect(bst.getHeight(6)).toBe(2); // true
17
13
  expect(bst.getHeight()).toBe(5); // true
18
14
  expect(bst.getDepth(6)).toBe(3); // true
19
15
  const leftMost = bst.getLeftMost();
20
- leftMost?.key === 1; // true
21
16
  expect(leftMost).toBe(1);
22
17
  bst.delete(6);
23
18
  bst.getNode(6); // undefined
@@ -26,7 +21,6 @@ describe('Overall BinaryTree Test', () => {
26
21
  expect(bst.isAVLBalanced()).toBe(true);
27
22
  const bfsIDs: number[] = [];
28
23
  bst.bfs(node => bfsIDs.push(node.key));
29
- bfsIDs[0] === 11; // true
30
24
  expect(bfsIDs[0]).toBe(11);
31
25
 
32
26
  const objBST = new BST<number, { key: number; keyA: number }>();