data-structure-typed 1.36.8 → 1.37.0

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 (85) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/README.md +8 -0
  3. package/dist/data-structures/binary-tree/avl-tree.d.ts +5 -5
  4. package/dist/data-structures/binary-tree/avl-tree.js +6 -6
  5. package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
  6. package/dist/data-structures/binary-tree/binary-tree.d.ts +18 -95
  7. package/dist/data-structures/binary-tree/binary-tree.js +82 -183
  8. package/dist/data-structures/binary-tree/binary-tree.js.map +1 -1
  9. package/dist/data-structures/binary-tree/bst.d.ts +6 -20
  10. package/dist/data-structures/binary-tree/bst.js +22 -122
  11. package/dist/data-structures/binary-tree/bst.js.map +1 -1
  12. package/dist/data-structures/binary-tree/tree-multiset.d.ts +6 -67
  13. package/dist/data-structures/binary-tree/tree-multiset.js +10 -257
  14. package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -1
  15. package/dist/data-structures/graph/abstract-graph.js +4 -3
  16. package/dist/data-structures/graph/abstract-graph.js.map +1 -1
  17. package/dist/data-structures/hash/hash-map.d.ts +1 -1
  18. package/dist/data-structures/hash/hash-map.js +1 -1
  19. package/dist/data-structures/hash/hash-table.d.ts +3 -3
  20. package/dist/data-structures/hash/hash-table.js +3 -3
  21. package/dist/data-structures/heap/heap.js.map +1 -1
  22. package/dist/data-structures/linked-list/skip-linked-list.d.ts +3 -3
  23. package/dist/data-structures/linked-list/skip-linked-list.js +3 -3
  24. package/dist/data-structures/queue/deque.d.ts +2 -2
  25. package/dist/data-structures/queue/deque.js +2 -2
  26. package/dist/data-structures/queue/queue.js +1 -1
  27. package/dist/data-structures/trie/trie.d.ts +2 -2
  28. package/dist/data-structures/trie/trie.js +2 -2
  29. package/dist/interfaces/binary-tree.d.ts +1 -1
  30. package/lib/data-structures/binary-tree/avl-tree.d.ts +5 -5
  31. package/lib/data-structures/binary-tree/avl-tree.js +6 -6
  32. package/lib/data-structures/binary-tree/binary-tree.d.ts +18 -95
  33. package/lib/data-structures/binary-tree/binary-tree.js +82 -183
  34. package/lib/data-structures/binary-tree/bst.d.ts +6 -20
  35. package/lib/data-structures/binary-tree/bst.js +22 -122
  36. package/lib/data-structures/binary-tree/tree-multiset.d.ts +6 -67
  37. package/lib/data-structures/binary-tree/tree-multiset.js +10 -257
  38. package/lib/data-structures/graph/abstract-graph.js +4 -3
  39. package/lib/data-structures/hash/hash-map.d.ts +1 -1
  40. package/lib/data-structures/hash/hash-map.js +1 -1
  41. package/lib/data-structures/hash/hash-table.d.ts +3 -3
  42. package/lib/data-structures/hash/hash-table.js +3 -3
  43. package/lib/data-structures/linked-list/skip-linked-list.d.ts +3 -3
  44. package/lib/data-structures/linked-list/skip-linked-list.js +3 -3
  45. package/lib/data-structures/queue/deque.d.ts +2 -2
  46. package/lib/data-structures/queue/deque.js +2 -2
  47. package/lib/data-structures/queue/queue.js +1 -1
  48. package/lib/data-structures/trie/trie.d.ts +2 -2
  49. package/lib/data-structures/trie/trie.js +2 -2
  50. package/lib/interfaces/binary-tree.d.ts +1 -1
  51. package/package.json +9 -7
  52. package/src/data-structures/binary-tree/avl-tree.ts +6 -6
  53. package/src/data-structures/binary-tree/binary-tree.ts +85 -274
  54. package/src/data-structures/binary-tree/bst.ts +22 -106
  55. package/src/data-structures/binary-tree/rb-tree.ts +3 -3
  56. package/src/data-structures/binary-tree/tree-multiset.ts +10 -249
  57. package/src/data-structures/graph/abstract-graph.ts +4 -3
  58. package/src/data-structures/hash/hash-map.ts +1 -1
  59. package/src/data-structures/hash/hash-table.ts +3 -3
  60. package/src/data-structures/heap/heap.ts +5 -2
  61. package/src/data-structures/linked-list/skip-linked-list.ts +3 -3
  62. package/src/data-structures/queue/deque.ts +2 -2
  63. package/src/data-structures/queue/queue.ts +1 -1
  64. package/src/data-structures/trie/trie.ts +2 -2
  65. package/src/interfaces/binary-tree.ts +1 -1
  66. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +19 -17
  67. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +2 -2
  68. package/test/unit/data-structures/binary-tree/bst.test.ts +72 -35
  69. package/test/unit/data-structures/binary-tree/overall.test.ts +4 -4
  70. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +1 -1
  71. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +67 -37
  72. package/test/unit/data-structures/graph/directed-graph.test.ts +1 -1
  73. package/test/unit/data-structures/graph/undirected-graph.test.ts +1 -1
  74. package/test/unit/data-structures/hash/hash-map.test.ts +2 -2
  75. package/test/unit/data-structures/hash/hash-table.test.ts +5 -5
  76. package/test/unit/data-structures/heap/heap.test.ts +15 -12
  77. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +7 -7
  78. package/test/unit/data-structures/linked-list/skip-list.test.ts +2 -2
  79. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +1 -1
  80. package/test/unit/data-structures/queue/deque.test.ts +20 -3
  81. package/test/unit/data-structures/queue/queue.test.ts +42 -0
  82. package/test/unit/data-structures/trie/trie.test.ts +5 -5
  83. package/test/utils/big-o.ts +64 -57
  84. package/umd/bundle.min.js +1 -1
  85. package/umd/bundle.min.js.map +1 -1
@@ -1,4 +1,4 @@
1
- import {AVLTree} from '../../../../src';
1
+ import {AVLTree, CP} from '../../../../src';
2
2
 
3
3
  describe('AVL Tree Test', () => {
4
4
  it('should perform various operations on a AVL Tree', () => {
@@ -22,10 +22,12 @@ describe('AVL Tree Test', () => {
22
22
  const getMinNodeBySpecificNode = node15 && tree.getLeftMost(node15);
23
23
  expect(getMinNodeBySpecificNode?.key).toBe(12);
24
24
 
25
- const subTreeSum = node15 && tree.subTreeSum(node15);
25
+ let subTreeSum = 0;
26
+ node15 && tree.subTreeForeach(node15, node => (subTreeSum += node.key));
26
27
  expect(subTreeSum).toBe(70);
27
28
 
28
- const lesserSum = tree.lesserSum(10);
29
+ let lesserSum = 0;
30
+ tree.lesserOrGreaterForeach(10, CP.lt, node => (lesserSum += node.key));
29
31
  expect(lesserSum).toBe(45);
30
32
 
31
33
  // 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.
@@ -41,56 +43,56 @@ describe('AVL Tree Test', () => {
41
43
  expect(bfs[0].key).toBe(8);
42
44
  expect(bfs[bfs.length - 1].key).toBe(16);
43
45
 
44
- expect(tree.remove(11)[0].deleted?.key).toBe(11);
46
+ expect(tree.delete(11)[0].deleted?.key).toBe(11);
45
47
  expect(tree.isAVLBalanced()).toBe(true);
46
48
  expect(node15 && tree.getHeight(node15)).toBe(2);
47
49
 
48
- expect(tree.remove(1)[0].deleted?.key).toBe(1);
50
+ expect(tree.delete(1)[0].deleted?.key).toBe(1);
49
51
  expect(tree.isAVLBalanced()).toBe(true);
50
52
  expect(tree.getHeight()).toBe(4);
51
53
 
52
- expect(tree.remove(4)[0].deleted?.key).toBe(4);
54
+ expect(tree.delete(4)[0].deleted?.key).toBe(4);
53
55
  expect(tree.isAVLBalanced()).toBe(true);
54
56
  expect(tree.getHeight()).toBe(4);
55
57
 
56
- expect(tree.remove(10)[0].deleted?.key).toBe(10);
58
+ expect(tree.delete(10)[0].deleted?.key).toBe(10);
57
59
  expect(tree.isAVLBalanced()).toBe(true);
58
60
  expect(tree.getHeight()).toBe(3);
59
61
 
60
- expect(tree.remove(15)[0].deleted?.key).toBe(15);
62
+ expect(tree.delete(15)[0].deleted?.key).toBe(15);
61
63
  expect(tree.isAVLBalanced()).toBe(true);
62
64
 
63
65
  expect(tree.getHeight()).toBe(3);
64
66
 
65
- expect(tree.remove(5)[0].deleted?.key).toBe(5);
67
+ expect(tree.delete(5)[0].deleted?.key).toBe(5);
66
68
  expect(tree.isAVLBalanced()).toBe(true);
67
69
  expect(tree.getHeight()).toBe(3);
68
70
 
69
- expect(tree.remove(13)[0].deleted?.key).toBe(13);
71
+ expect(tree.delete(13)[0].deleted?.key).toBe(13);
70
72
  expect(tree.isAVLBalanced()).toBe(true);
71
73
  expect(tree.getHeight()).toBe(3);
72
74
 
73
- expect(tree.remove(3)[0].deleted?.key).toBe(3);
75
+ expect(tree.delete(3)[0].deleted?.key).toBe(3);
74
76
  expect(tree.isAVLBalanced()).toBe(true);
75
77
  expect(tree.getHeight()).toBe(3);
76
78
 
77
- expect(tree.remove(8)[0].deleted?.key).toBe(8);
79
+ expect(tree.delete(8)[0].deleted?.key).toBe(8);
78
80
  expect(tree.isAVLBalanced()).toBe(true);
79
81
  expect(tree.getHeight()).toBe(3);
80
82
 
81
- expect(tree.remove(6)[0].deleted?.key).toBe(6);
82
- expect(tree.remove(6).length).toBe(0);
83
+ expect(tree.delete(6)[0].deleted?.key).toBe(6);
84
+ expect(tree.delete(6).length).toBe(0);
83
85
  expect(tree.isAVLBalanced()).toBe(true);
84
86
  expect(tree.getHeight()).toBe(2);
85
87
 
86
- expect(tree.remove(7)[0].deleted?.key).toBe(7);
88
+ expect(tree.delete(7)[0].deleted?.key).toBe(7);
87
89
  expect(tree.isAVLBalanced()).toBe(true);
88
90
  expect(tree.getHeight()).toBe(2);
89
91
 
90
- expect(tree.remove(9)[0].deleted?.key).toBe(9);
92
+ expect(tree.delete(9)[0].deleted?.key).toBe(9);
91
93
  expect(tree.isAVLBalanced()).toBe(true);
92
94
  expect(tree.getHeight()).toBe(2);
93
- expect(tree.remove(14)[0].deleted?.key).toBe(14);
95
+ expect(tree.delete(14)[0].deleted?.key).toBe(14);
94
96
  expect(tree.isAVLBalanced()).toBe(true);
95
97
  expect(tree.getHeight()).toBe(1);
96
98
 
@@ -83,12 +83,12 @@ describe('BinaryTree', () => {
83
83
  expect(binaryTree.size).toBe(1);
84
84
  });
85
85
 
86
- test('should remove a node', () => {
86
+ test('should delete a node', () => {
87
87
  const node = binaryTree.add(1);
88
88
  expect(binaryTree.size).toBe(1);
89
89
 
90
90
  if (node) {
91
- const result = binaryTree.remove(node);
91
+ const result = binaryTree.delete(node);
92
92
  expect(result).toHaveLength(1);
93
93
  expect(binaryTree.size).toBe(0);
94
94
  }
@@ -1,4 +1,6 @@
1
- import {BST, BSTNode} from '../../../../src';
1
+ import {BST, BSTNode, CP} from '../../../../src';
2
+
3
+ const isDebug = false;
2
4
 
3
5
  describe('BST operations test', () => {
4
6
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
@@ -7,7 +9,7 @@ describe('BST operations test', () => {
7
9
  bst.add(11, 11);
8
10
  bst.add(3, 3);
9
11
  const idsAndValues = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
10
- bst.addMany(idsAndValues, idsAndValues);
12
+ bst.addMany(idsAndValues, idsAndValues, false);
11
13
  expect(bst.root).toBeInstanceOf(BSTNode);
12
14
 
13
15
  if (bst.root) expect(bst.root.key).toBe(11);
@@ -33,10 +35,12 @@ describe('BST operations test', () => {
33
35
  const minNodeBySpecificNode = node15 && bst.getLeftMost(node15);
34
36
  expect(minNodeBySpecificNode?.key).toBe(12);
35
37
 
36
- const subTreeSum = node15 && bst.subTreeSum(15);
38
+ let subTreeSum = 0;
39
+ node15 && bst.subTreeForeach(15, node => (subTreeSum += node.key));
37
40
  expect(subTreeSum).toBe(70);
38
41
 
39
- const lesserSum = bst.lesserSum(10);
42
+ let lesserSum = 0;
43
+ bst.lesserOrGreaterForeach(10, CP.lt, node => (lesserSum += node.key));
40
44
  expect(lesserSum).toBe(45);
41
45
 
42
46
  expect(node15).toBeInstanceOf(BSTNode);
@@ -55,7 +59,7 @@ describe('BST operations test', () => {
55
59
  expect(bfsNodesAfterBalanced[0].key).toBe(8);
56
60
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
57
61
 
58
- const removed11 = bst.remove(11);
62
+ const removed11 = bst.delete(11);
59
63
  expect(removed11).toBeInstanceOf(Array);
60
64
  expect(removed11[0]).toBeDefined();
61
65
  expect(removed11[0].deleted).toBeDefined();
@@ -66,7 +70,7 @@ describe('BST operations test', () => {
66
70
 
67
71
  expect(bst.getHeight(15)).toBe(1);
68
72
 
69
- const removed1 = bst.remove(1);
73
+ const removed1 = bst.delete(1);
70
74
  expect(removed1).toBeInstanceOf(Array);
71
75
  expect(removed1[0]).toBeDefined();
72
76
  expect(removed1[0].deleted).toBeDefined();
@@ -76,7 +80,7 @@ describe('BST operations test', () => {
76
80
 
77
81
  expect(bst.getHeight()).toBe(4);
78
82
 
79
- const removed4 = bst.remove(4);
83
+ const removed4 = bst.delete(4);
80
84
  expect(removed4).toBeInstanceOf(Array);
81
85
  expect(removed4[0]).toBeDefined();
82
86
  expect(removed4[0].deleted).toBeDefined();
@@ -84,7 +88,7 @@ describe('BST operations test', () => {
84
88
  expect(bst.isAVLBalanced()).toBe(true);
85
89
  expect(bst.getHeight()).toBe(4);
86
90
 
87
- const removed10 = bst.remove(10);
91
+ const removed10 = bst.delete(10);
88
92
  expect(removed10).toBeInstanceOf(Array);
89
93
  expect(removed10[0]).toBeDefined();
90
94
  expect(removed10[0].deleted).toBeDefined();
@@ -92,7 +96,7 @@ describe('BST operations test', () => {
92
96
  expect(bst.isAVLBalanced()).toBe(false);
93
97
  expect(bst.getHeight()).toBe(4);
94
98
 
95
- const removed15 = bst.remove(15);
99
+ const removed15 = bst.delete(15);
96
100
  expect(removed15).toBeInstanceOf(Array);
97
101
  expect(removed15[0]).toBeDefined();
98
102
  expect(removed15[0].deleted).toBeDefined();
@@ -101,7 +105,7 @@ describe('BST operations test', () => {
101
105
  expect(bst.isAVLBalanced()).toBe(true);
102
106
  expect(bst.getHeight()).toBe(3);
103
107
 
104
- const removed5 = bst.remove(5);
108
+ const removed5 = bst.delete(5);
105
109
  expect(removed5).toBeInstanceOf(Array);
106
110
  expect(removed5[0]).toBeDefined();
107
111
  expect(removed5[0].deleted).toBeDefined();
@@ -110,7 +114,7 @@ describe('BST operations test', () => {
110
114
  expect(bst.isAVLBalanced()).toBe(true);
111
115
  expect(bst.getHeight()).toBe(3);
112
116
 
113
- const removed13 = bst.remove(13);
117
+ const removed13 = bst.delete(13);
114
118
  expect(removed13).toBeInstanceOf(Array);
115
119
  expect(removed13[0]).toBeDefined();
116
120
  expect(removed13[0].deleted).toBeDefined();
@@ -118,7 +122,7 @@ describe('BST operations test', () => {
118
122
  expect(bst.isAVLBalanced()).toBe(true);
119
123
  expect(bst.getHeight()).toBe(3);
120
124
 
121
- const removed3 = bst.remove(3);
125
+ const removed3 = bst.delete(3);
122
126
  expect(removed3).toBeInstanceOf(Array);
123
127
  expect(removed3[0]).toBeDefined();
124
128
  expect(removed3[0].deleted).toBeDefined();
@@ -126,7 +130,7 @@ describe('BST operations test', () => {
126
130
  expect(bst.isAVLBalanced()).toBe(false);
127
131
  expect(bst.getHeight()).toBe(3);
128
132
 
129
- const removed8 = bst.remove(8);
133
+ const removed8 = bst.delete(8);
130
134
  expect(removed8).toBeInstanceOf(Array);
131
135
  expect(removed8[0]).toBeDefined();
132
136
  expect(removed8[0].deleted).toBeDefined();
@@ -134,16 +138,16 @@ describe('BST operations test', () => {
134
138
  expect(bst.isAVLBalanced()).toBe(true);
135
139
  expect(bst.getHeight()).toBe(3);
136
140
 
137
- const removed6 = bst.remove(6);
141
+ const removed6 = bst.delete(6);
138
142
  expect(removed6).toBeInstanceOf(Array);
139
143
  expect(removed6[0]).toBeDefined();
140
144
  expect(removed6[0].deleted).toBeDefined();
141
145
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
142
- expect(bst.remove(6).length).toBe(0);
146
+ expect(bst.delete(6).length).toBe(0);
143
147
  expect(bst.isAVLBalanced()).toBe(false);
144
148
  expect(bst.getHeight()).toBe(3);
145
149
 
146
- const removed7 = bst.remove(7);
150
+ const removed7 = bst.delete(7);
147
151
  expect(removed7).toBeInstanceOf(Array);
148
152
  expect(removed7[0]).toBeDefined();
149
153
  expect(removed7[0].deleted).toBeDefined();
@@ -151,7 +155,7 @@ describe('BST operations test', () => {
151
155
  expect(bst.isAVLBalanced()).toBe(false);
152
156
  expect(bst.getHeight()).toBe(3);
153
157
 
154
- const removed9 = bst.remove(9);
158
+ const removed9 = bst.delete(9);
155
159
  expect(removed9).toBeInstanceOf(Array);
156
160
  expect(removed9[0]).toBeDefined();
157
161
  expect(removed9[0].deleted).toBeDefined();
@@ -159,7 +163,7 @@ describe('BST operations test', () => {
159
163
  expect(bst.isAVLBalanced()).toBe(false);
160
164
  expect(bst.getHeight()).toBe(3);
161
165
 
162
- const removed14 = bst.remove(14);
166
+ const removed14 = bst.delete(14);
163
167
  expect(removed14).toBeInstanceOf(Array);
164
168
  expect(removed14[0]).toBeDefined();
165
169
  expect(removed14[0].deleted).toBeDefined();
@@ -204,7 +208,8 @@ describe('BST operations test', () => {
204
208
 
205
209
  objBST.addMany(
206
210
  values.map(item => item.key),
207
- values
211
+ values,
212
+ false
208
213
  );
209
214
 
210
215
  expect(objBST.root).toBeInstanceOf(BSTNode);
@@ -231,10 +236,12 @@ describe('BST operations test', () => {
231
236
  const minNodeBySpecificNode = node15 && objBST.getLeftMost(node15);
232
237
  expect(minNodeBySpecificNode?.key).toBe(12);
233
238
 
234
- const subTreeSum = node15 && objBST.subTreeSum(node15);
239
+ let subTreeSum = 0;
240
+ node15 && objBST.subTreeForeach(node15, node => (subTreeSum += node.key));
235
241
  expect(subTreeSum).toBe(70);
236
242
 
237
- const lesserSum = objBST.lesserSum(10);
243
+ let lesserSum = 0;
244
+ objBST.lesserOrGreaterForeach(10, CP.lt, node => (lesserSum += node.key));
238
245
  expect(lesserSum).toBe(45);
239
246
 
240
247
  expect(node15).toBeInstanceOf(BSTNode);
@@ -253,7 +260,7 @@ describe('BST operations test', () => {
253
260
  expect(bfsNodesAfterBalanced[0].key).toBe(8);
254
261
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
255
262
 
256
- const removed11 = objBST.remove(11);
263
+ const removed11 = objBST.delete(11);
257
264
  expect(removed11).toBeInstanceOf(Array);
258
265
  expect(removed11[0]).toBeDefined();
259
266
  expect(removed11[0].deleted).toBeDefined();
@@ -264,7 +271,7 @@ describe('BST operations test', () => {
264
271
 
265
272
  expect(node15 && objBST.getHeight(node15)).toBe(2);
266
273
 
267
- const removed1 = objBST.remove(1);
274
+ const removed1 = objBST.delete(1);
268
275
  expect(removed1).toBeInstanceOf(Array);
269
276
  expect(removed1[0]).toBeDefined();
270
277
  expect(removed1[0].deleted).toBeDefined();
@@ -274,7 +281,7 @@ describe('BST operations test', () => {
274
281
 
275
282
  expect(objBST.getHeight()).toBe(4);
276
283
 
277
- const removed4 = objBST.remove(4);
284
+ const removed4 = objBST.delete(4);
278
285
  expect(removed4).toBeInstanceOf(Array);
279
286
  expect(removed4[0]).toBeDefined();
280
287
  expect(removed4[0].deleted).toBeDefined();
@@ -282,7 +289,7 @@ describe('BST operations test', () => {
282
289
  expect(objBST.isAVLBalanced()).toBe(true);
283
290
  expect(objBST.getHeight()).toBe(4);
284
291
 
285
- const removed10 = objBST.remove(10);
292
+ const removed10 = objBST.delete(10);
286
293
  expect(removed10).toBeInstanceOf(Array);
287
294
  expect(removed10[0]).toBeDefined();
288
295
  expect(removed10[0].deleted).toBeDefined();
@@ -290,7 +297,7 @@ describe('BST operations test', () => {
290
297
  expect(objBST.isAVLBalanced()).toBe(false);
291
298
  expect(objBST.getHeight()).toBe(4);
292
299
 
293
- const removed15 = objBST.remove(15);
300
+ const removed15 = objBST.delete(15);
294
301
  expect(removed15).toBeInstanceOf(Array);
295
302
  expect(removed15[0]).toBeDefined();
296
303
  expect(removed15[0].deleted).toBeDefined();
@@ -299,7 +306,7 @@ describe('BST operations test', () => {
299
306
  expect(objBST.isAVLBalanced()).toBe(true);
300
307
  expect(objBST.getHeight()).toBe(3);
301
308
 
302
- const removed5 = objBST.remove(5);
309
+ const removed5 = objBST.delete(5);
303
310
  expect(removed5).toBeInstanceOf(Array);
304
311
  expect(removed5[0]).toBeDefined();
305
312
  expect(removed5[0].deleted).toBeDefined();
@@ -308,7 +315,7 @@ describe('BST operations test', () => {
308
315
  expect(objBST.isAVLBalanced()).toBe(true);
309
316
  expect(objBST.getHeight()).toBe(3);
310
317
 
311
- const removed13 = objBST.remove(13);
318
+ const removed13 = objBST.delete(13);
312
319
  expect(removed13).toBeInstanceOf(Array);
313
320
  expect(removed13[0]).toBeDefined();
314
321
  expect(removed13[0].deleted).toBeDefined();
@@ -316,7 +323,7 @@ describe('BST operations test', () => {
316
323
  expect(objBST.isAVLBalanced()).toBe(true);
317
324
  expect(objBST.getHeight()).toBe(3);
318
325
 
319
- const removed3 = objBST.remove(3);
326
+ const removed3 = objBST.delete(3);
320
327
  expect(removed3).toBeInstanceOf(Array);
321
328
  expect(removed3[0]).toBeDefined();
322
329
  expect(removed3[0].deleted).toBeDefined();
@@ -324,7 +331,7 @@ describe('BST operations test', () => {
324
331
  expect(objBST.isAVLBalanced()).toBe(false);
325
332
  expect(objBST.getHeight()).toBe(3);
326
333
 
327
- const removed8 = objBST.remove(8);
334
+ const removed8 = objBST.delete(8);
328
335
  expect(removed8).toBeInstanceOf(Array);
329
336
  expect(removed8[0]).toBeDefined();
330
337
  expect(removed8[0].deleted).toBeDefined();
@@ -332,16 +339,16 @@ describe('BST operations test', () => {
332
339
  expect(objBST.isAVLBalanced()).toBe(true);
333
340
  expect(objBST.getHeight()).toBe(3);
334
341
 
335
- const removed6 = objBST.remove(6);
342
+ const removed6 = objBST.delete(6);
336
343
  expect(removed6).toBeInstanceOf(Array);
337
344
  expect(removed6[0]).toBeDefined();
338
345
  expect(removed6[0].deleted).toBeDefined();
339
346
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
340
- expect(objBST.remove(6).length).toBe(0);
347
+ expect(objBST.delete(6).length).toBe(0);
341
348
  expect(objBST.isAVLBalanced()).toBe(false);
342
349
  expect(objBST.getHeight()).toBe(3);
343
350
 
344
- const removed7 = objBST.remove(7);
351
+ const removed7 = objBST.delete(7);
345
352
  expect(removed7).toBeInstanceOf(Array);
346
353
  expect(removed7[0]).toBeDefined();
347
354
  expect(removed7[0].deleted).toBeDefined();
@@ -349,7 +356,7 @@ describe('BST operations test', () => {
349
356
  expect(objBST.isAVLBalanced()).toBe(false);
350
357
  expect(objBST.getHeight()).toBe(3);
351
358
 
352
- const removed9 = objBST.remove(9);
359
+ const removed9 = objBST.delete(9);
353
360
  expect(removed9).toBeInstanceOf(Array);
354
361
  expect(removed9[0]).toBeDefined();
355
362
  expect(removed9[0].deleted).toBeDefined();
@@ -357,7 +364,7 @@ describe('BST operations test', () => {
357
364
  expect(objBST.isAVLBalanced()).toBe(false);
358
365
  expect(objBST.getHeight()).toBe(3);
359
366
 
360
- const removed14 = objBST.remove(14);
367
+ const removed14 = objBST.delete(14);
361
368
  expect(removed14).toBeInstanceOf(Array);
362
369
  expect(removed14[0]).toBeDefined();
363
370
  expect(removed14[0].deleted).toBeDefined();
@@ -378,3 +385,33 @@ describe('BST operations test', () => {
378
385
  expect(bfsNodes[2].key).toBe(16);
379
386
  });
380
387
  });
388
+
389
+ describe('BST Performance test', function () {
390
+ const bst = new BST<BSTNode<number>>();
391
+ const inputSize = 10000; // Adjust input sizes as needed
392
+
393
+ beforeEach(() => {
394
+ bst.clear();
395
+ });
396
+
397
+ it(`Observe the time consumption of BST.dfs be good`, function () {
398
+ const startDFS = performance.now();
399
+ const dfs = bst.dfs();
400
+ isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
401
+ });
402
+
403
+ it('Should the time consumption of lesserOrGreaterForeach fitting O(n log n)', function () {
404
+ const nodes: number[] = [];
405
+ for (let i = 0; i < inputSize; i++) {
406
+ nodes.push(i);
407
+ }
408
+ const start = performance.now();
409
+ bst.addMany(nodes);
410
+ isDebug && console.log('---add', performance.now() - start);
411
+ const startL = performance.now();
412
+ bst.lesserOrGreaterForeach(inputSize / 2, CP.lt, node => {
413
+ return node.key - 1;
414
+ });
415
+ isDebug && console.log('---lesserOrGreaterForeach', performance.now() - startL);
416
+ });
417
+ });
@@ -5,7 +5,7 @@ describe('Overall BinaryTree Test', () => {
5
5
  const bst = new BST();
6
6
  bst.add(11);
7
7
  bst.add(3);
8
- bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
8
+ bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], undefined, false);
9
9
  bst.size === 16; // true
10
10
  expect(bst.size).toBe(16); // true
11
11
  bst.has(6); // true
@@ -19,7 +19,7 @@ describe('Overall BinaryTree Test', () => {
19
19
  const leftMost = bst.getLeftMost();
20
20
  leftMost?.key === 1; // true
21
21
  expect(leftMost?.key).toBe(1);
22
- bst.remove(6);
22
+ bst.delete(6);
23
23
  bst.get(6); // null
24
24
  expect(bst.get(6)).toBeNull();
25
25
  bst.isAVLBalanced(); // true or false
@@ -52,13 +52,13 @@ describe('Overall BinaryTree Test', () => {
52
52
  ]
53
53
  );
54
54
 
55
- objBST.remove(11);
55
+ objBST.delete(11);
56
56
 
57
57
  const avlTree = new AVLTree();
58
58
  avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
59
59
  avlTree.isAVLBalanced(); // true
60
60
  expect(avlTree.isAVLBalanced()).toBe(true); // true
61
- avlTree.remove(10);
61
+ avlTree.delete(10);
62
62
  avlTree.isAVLBalanced(); // true
63
63
  expect(avlTree.isAVLBalanced()).toBe(true); // true
64
64
  });
@@ -31,7 +31,7 @@ describe('Red-Black Tree Tests', () => {
31
31
  // tree.add(8);
32
32
  //
33
33
  // // Delete a node (e.g., 3) and check if it's gone
34
- // tree.remove(3);
34
+ // tree.delete(3);
35
35
  // expect(tree.has(3)).toBe(false);
36
36
  //
37
37
  // // Perform in-order traversal to check if the tree is still balanced