data-structure-typed 1.37.1 → 1.37.3

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 (48) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/dist/data-structures/binary-tree/avl-tree.d.ts +5 -7
  3. package/dist/data-structures/binary-tree/avl-tree.js +7 -9
  4. package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
  5. package/dist/data-structures/binary-tree/binary-tree.d.ts +61 -209
  6. package/dist/data-structures/binary-tree/binary-tree.js +133 -269
  7. package/dist/data-structures/binary-tree/binary-tree.js.map +1 -1
  8. package/dist/data-structures/binary-tree/bst.d.ts +22 -19
  9. package/dist/data-structures/binary-tree/bst.js +68 -54
  10. package/dist/data-structures/binary-tree/bst.js.map +1 -1
  11. package/dist/data-structures/binary-tree/tree-multiset.d.ts +2 -36
  12. package/dist/data-structures/binary-tree/tree-multiset.js +3 -81
  13. package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -1
  14. package/dist/data-structures/heap/heap.d.ts +1 -1
  15. package/dist/data-structures/heap/heap.js +1 -1
  16. package/dist/types/data-structures/binary-tree.d.ts +4 -2
  17. package/dist/types/data-structures/binary-tree.js +6 -6
  18. package/dist/types/data-structures/binary-tree.js.map +1 -1
  19. package/dist/types/data-structures/index.d.ts +2 -0
  20. package/lib/data-structures/binary-tree/avl-tree.d.ts +5 -7
  21. package/lib/data-structures/binary-tree/avl-tree.js +7 -9
  22. package/lib/data-structures/binary-tree/binary-tree.d.ts +61 -209
  23. package/lib/data-structures/binary-tree/binary-tree.js +134 -270
  24. package/lib/data-structures/binary-tree/bst.d.ts +22 -19
  25. package/lib/data-structures/binary-tree/bst.js +69 -55
  26. package/lib/data-structures/binary-tree/tree-multiset.d.ts +2 -36
  27. package/lib/data-structures/binary-tree/tree-multiset.js +4 -82
  28. package/lib/data-structures/heap/heap.d.ts +1 -1
  29. package/lib/data-structures/heap/heap.js +1 -1
  30. package/lib/types/data-structures/binary-tree.d.ts +4 -2
  31. package/lib/types/data-structures/binary-tree.js +5 -5
  32. package/lib/types/data-structures/index.d.ts +2 -0
  33. package/package.json +6 -6
  34. package/src/data-structures/binary-tree/avl-tree.ts +7 -9
  35. package/src/data-structures/binary-tree/binary-tree.ts +79 -54
  36. package/src/data-structures/binary-tree/bst.ts +37 -32
  37. package/src/data-structures/binary-tree/tree-multiset.ts +3 -3
  38. package/src/types/data-structures/binary-tree.ts +2 -2
  39. package/test/config.ts +1 -0
  40. package/test/integration/avl-tree.test.ts +23 -21
  41. package/test/integration/bst.test.ts +49 -44
  42. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +50 -0
  43. package/test/unit/data-structures/binary-tree/bst.test.ts +8 -1
  44. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +2 -1
  45. package/test/unit/data-structures/linked-list/linked-list.test.ts +1 -1
  46. package/test/utils/big-o.ts +2 -1
  47. package/umd/bundle.min.js +1 -1
  48. package/umd/bundle.min.js.map +1 -1
@@ -1,4 +1,4 @@
1
- import {AVLTree} from 'avl-tree-typed';
1
+ import {AVLTree, CP} from 'avl-tree-typed';
2
2
 
3
3
  describe('AVL Tree Test', () => {
4
4
  it('should perform various operations on a AVL Tree', () => {
@@ -12,7 +12,7 @@ describe('AVL Tree Test', () => {
12
12
  expect(node6 && tree.getHeight(node6)).toBe(3);
13
13
  expect(node6 && tree.getDepth(node6)).toBe(1);
14
14
 
15
- const getNodeById = tree.get(10, 'key');
15
+ const getNodeById = tree.get(10);
16
16
  expect(getNodeById?.key).toBe(10);
17
17
 
18
18
  const getMinNodeByRoot = tree.getLeftMost();
@@ -22,75 +22,77 @@ 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.subTreeTraverse(node => (subTreeSum += node.key), 15);
26
27
  expect(subTreeSum).toBe(70);
27
28
 
28
- const lesserSum = tree.lesserSum(10);
29
+ let lesserSum = 0;
30
+ tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
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.
32
34
  expect(node15?.val).toBe(15);
33
35
 
34
- const dfs = tree.dfs('in', 'node');
36
+ const dfs = tree.dfs(node => node, 'in');
35
37
  expect(dfs[0].key).toBe(1);
36
38
  expect(dfs[dfs.length - 1].key).toBe(16);
37
39
 
38
40
  tree.perfectlyBalance();
39
- const bfs = tree.bfs('node');
41
+ const bfs = tree.bfs(node => node);
40
42
  expect(tree.isPerfectlyBalanced()).toBe(true);
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
 
@@ -100,7 +102,7 @@ describe('AVL Tree Test', () => {
100
102
  expect(lastBFSIds[1]).toBe(2);
101
103
  expect(lastBFSIds[2]).toBe(16);
102
104
 
103
- const lastBFSNodes = tree.bfs('node');
105
+ const lastBFSNodes = tree.bfs(node => node);
104
106
  expect(lastBFSNodes[0].key).toBe(12);
105
107
  expect(lastBFSNodes[1].key).toBe(2);
106
108
  expect(lastBFSNodes[2].key).toBe(16);
@@ -1,4 +1,4 @@
1
- import {BST, BSTNode} from 'bst-typed';
1
+ import {BST, BSTNode, CP} from 'bst-typed';
2
2
 
3
3
  describe('Individual package BST operations test', () => {
4
4
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
@@ -7,7 +7,7 @@ describe('Individual package BST operations test', () => {
7
7
  bst.add(11, 11);
8
8
  bst.add(3, 3);
9
9
  const idsOrVals = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
10
- bst.addMany(idsOrVals, idsOrVals);
10
+ bst.addMany(idsOrVals, idsOrVals, false);
11
11
  expect(bst.root).toBeInstanceOf(BSTNode);
12
12
 
13
13
  if (bst.root) expect(bst.root.key).toBe(11);
@@ -23,7 +23,7 @@ describe('Individual package BST operations test', () => {
23
23
  const nodeId10 = bst.get(10);
24
24
  expect(nodeId10?.key).toBe(10);
25
25
 
26
- const nodeVal9 = bst.get(9, 'val');
26
+ const nodeVal9 = bst.get(9, node => node.val);
27
27
  expect(nodeVal9?.key).toBe(9);
28
28
 
29
29
  const leftMost = bst.getLeftMost();
@@ -33,10 +33,12 @@ describe('Individual package BST operations test', () => {
33
33
  const minNodeBySpecificNode = node15 && bst.getLeftMost(node15);
34
34
  expect(minNodeBySpecificNode?.key).toBe(12);
35
35
 
36
- const subTreeSum = node15 && bst.subTreeSum(15);
36
+ let subTreeSum = 0;
37
+ node15 && bst.subTreeTraverse(node => (subTreeSum += node.key), 15);
37
38
  expect(subTreeSum).toBe(70);
38
39
 
39
- const lesserSum = bst.lesserSum(10);
40
+ let lesserSum = 0;
41
+ bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
40
42
  expect(lesserSum).toBe(45);
41
43
 
42
44
  expect(node15).toBeInstanceOf(BSTNode);
@@ -44,18 +46,18 @@ describe('Individual package BST operations test', () => {
44
46
  const node11 = bst.get(11);
45
47
  expect(node11).toBeInstanceOf(BSTNode);
46
48
 
47
- const dfsInorderNodes = bst.dfs('in', 'node');
49
+ const dfsInorderNodes = bst.dfs(node => node, 'in');
48
50
  expect(dfsInorderNodes[0].key).toBe(1);
49
51
  expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
50
52
 
51
53
  bst.perfectlyBalance();
52
54
  expect(bst.isPerfectlyBalanced()).toBe(true);
53
55
 
54
- const bfsNodesAfterBalanced = bst.bfs('node');
56
+ const bfsNodesAfterBalanced = bst.bfs(node => node);
55
57
  expect(bfsNodesAfterBalanced[0].key).toBe(8);
56
58
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
57
59
 
58
- const removed11 = bst.remove(11);
60
+ const removed11 = bst.delete(11);
59
61
  expect(removed11).toBeInstanceOf(Array);
60
62
  expect(removed11[0]).toBeDefined();
61
63
  expect(removed11[0].deleted).toBeDefined();
@@ -66,7 +68,7 @@ describe('Individual package BST operations test', () => {
66
68
 
67
69
  expect(bst.getHeight(15)).toBe(1);
68
70
 
69
- const removed1 = bst.remove(1);
71
+ const removed1 = bst.delete(1);
70
72
  expect(removed1).toBeInstanceOf(Array);
71
73
  expect(removed1[0]).toBeDefined();
72
74
  expect(removed1[0].deleted).toBeDefined();
@@ -76,7 +78,7 @@ describe('Individual package BST operations test', () => {
76
78
 
77
79
  expect(bst.getHeight()).toBe(4);
78
80
 
79
- const removed4 = bst.remove(4);
81
+ const removed4 = bst.delete(4);
80
82
  expect(removed4).toBeInstanceOf(Array);
81
83
  expect(removed4[0]).toBeDefined();
82
84
  expect(removed4[0].deleted).toBeDefined();
@@ -84,7 +86,7 @@ describe('Individual package BST operations test', () => {
84
86
  expect(bst.isAVLBalanced()).toBe(true);
85
87
  expect(bst.getHeight()).toBe(4);
86
88
 
87
- const removed10 = bst.remove(10);
89
+ const removed10 = bst.delete(10);
88
90
  expect(removed10).toBeInstanceOf(Array);
89
91
  expect(removed10[0]).toBeDefined();
90
92
  expect(removed10[0].deleted).toBeDefined();
@@ -92,7 +94,7 @@ describe('Individual package BST operations test', () => {
92
94
  expect(bst.isAVLBalanced()).toBe(false);
93
95
  expect(bst.getHeight()).toBe(4);
94
96
 
95
- const removed15 = bst.remove(15);
97
+ const removed15 = bst.delete(15);
96
98
  expect(removed15).toBeInstanceOf(Array);
97
99
  expect(removed15[0]).toBeDefined();
98
100
  expect(removed15[0].deleted).toBeDefined();
@@ -101,7 +103,7 @@ describe('Individual package BST operations test', () => {
101
103
  expect(bst.isAVLBalanced()).toBe(true);
102
104
  expect(bst.getHeight()).toBe(3);
103
105
 
104
- const removed5 = bst.remove(5);
106
+ const removed5 = bst.delete(5);
105
107
  expect(removed5).toBeInstanceOf(Array);
106
108
  expect(removed5[0]).toBeDefined();
107
109
  expect(removed5[0].deleted).toBeDefined();
@@ -110,7 +112,7 @@ describe('Individual package BST operations test', () => {
110
112
  expect(bst.isAVLBalanced()).toBe(true);
111
113
  expect(bst.getHeight()).toBe(3);
112
114
 
113
- const removed13 = bst.remove(13);
115
+ const removed13 = bst.delete(13);
114
116
  expect(removed13).toBeInstanceOf(Array);
115
117
  expect(removed13[0]).toBeDefined();
116
118
  expect(removed13[0].deleted).toBeDefined();
@@ -118,7 +120,7 @@ describe('Individual package BST operations test', () => {
118
120
  expect(bst.isAVLBalanced()).toBe(true);
119
121
  expect(bst.getHeight()).toBe(3);
120
122
 
121
- const removed3 = bst.remove(3);
123
+ const removed3 = bst.delete(3);
122
124
  expect(removed3).toBeInstanceOf(Array);
123
125
  expect(removed3[0]).toBeDefined();
124
126
  expect(removed3[0].deleted).toBeDefined();
@@ -126,7 +128,7 @@ describe('Individual package BST operations test', () => {
126
128
  expect(bst.isAVLBalanced()).toBe(false);
127
129
  expect(bst.getHeight()).toBe(3);
128
130
 
129
- const removed8 = bst.remove(8);
131
+ const removed8 = bst.delete(8);
130
132
  expect(removed8).toBeInstanceOf(Array);
131
133
  expect(removed8[0]).toBeDefined();
132
134
  expect(removed8[0].deleted).toBeDefined();
@@ -134,16 +136,16 @@ describe('Individual package BST operations test', () => {
134
136
  expect(bst.isAVLBalanced()).toBe(true);
135
137
  expect(bst.getHeight()).toBe(3);
136
138
 
137
- const removed6 = bst.remove(6);
139
+ const removed6 = bst.delete(6);
138
140
  expect(removed6).toBeInstanceOf(Array);
139
141
  expect(removed6[0]).toBeDefined();
140
142
  expect(removed6[0].deleted).toBeDefined();
141
143
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
142
- expect(bst.remove(6).length).toBe(0);
144
+ expect(bst.delete(6).length).toBe(0);
143
145
  expect(bst.isAVLBalanced()).toBe(false);
144
146
  expect(bst.getHeight()).toBe(3);
145
147
 
146
- const removed7 = bst.remove(7);
148
+ const removed7 = bst.delete(7);
147
149
  expect(removed7).toBeInstanceOf(Array);
148
150
  expect(removed7[0]).toBeDefined();
149
151
  expect(removed7[0].deleted).toBeDefined();
@@ -151,7 +153,7 @@ describe('Individual package BST operations test', () => {
151
153
  expect(bst.isAVLBalanced()).toBe(false);
152
154
  expect(bst.getHeight()).toBe(3);
153
155
 
154
- const removed9 = bst.remove(9);
156
+ const removed9 = bst.delete(9);
155
157
  expect(removed9).toBeInstanceOf(Array);
156
158
  expect(removed9[0]).toBeDefined();
157
159
  expect(removed9[0].deleted).toBeDefined();
@@ -159,7 +161,7 @@ describe('Individual package BST operations test', () => {
159
161
  expect(bst.isAVLBalanced()).toBe(false);
160
162
  expect(bst.getHeight()).toBe(3);
161
163
 
162
- const removed14 = bst.remove(14);
164
+ const removed14 = bst.delete(14);
163
165
  expect(removed14).toBeInstanceOf(Array);
164
166
  expect(removed14[0]).toBeDefined();
165
167
  expect(removed14[0].deleted).toBeDefined();
@@ -174,7 +176,7 @@ describe('Individual package BST operations test', () => {
174
176
  expect(bfsIDs[1]).toBe(12);
175
177
  expect(bfsIDs[2]).toBe(16);
176
178
 
177
- const bfsNodes = bst.bfs('node');
179
+ const bfsNodes = bst.bfs(node => node);
178
180
  expect(bfsNodes[0].key).toBe(2);
179
181
  expect(bfsNodes[1].key).toBe(12);
180
182
  expect(bfsNodes[2].key).toBe(16);
@@ -204,7 +206,8 @@ describe('Individual package BST operations test', () => {
204
206
 
205
207
  objBST.addMany(
206
208
  values.map(item => item.key),
207
- values
209
+ values,
210
+ false
208
211
  );
209
212
 
210
213
  expect(objBST.root).toBeInstanceOf(BSTNode);
@@ -217,10 +220,10 @@ describe('Individual package BST operations test', () => {
217
220
  expect(node6 && objBST.getHeight(node6)).toBe(2);
218
221
  expect(node6 && objBST.getDepth(node6)).toBe(3);
219
222
 
220
- const nodeId10 = objBST.get(10, 'key');
223
+ const nodeId10 = objBST.get(10);
221
224
  expect(nodeId10?.key).toBe(10);
222
225
 
223
- const nodeVal9 = objBST.get(9, 'key');
226
+ const nodeVal9 = objBST.get(9);
224
227
  expect(nodeVal9?.key).toBe(9);
225
228
 
226
229
  const leftMost = objBST.getLeftMost();
@@ -231,10 +234,12 @@ describe('Individual package BST operations test', () => {
231
234
  const minNodeBySpecificNode = node15 && objBST.getLeftMost(node15);
232
235
  expect(minNodeBySpecificNode?.key).toBe(12);
233
236
 
234
- const subTreeSum = node15 && objBST.subTreeSum(node15);
237
+ let subTreeSum = 0;
238
+ node15 && objBST.subTreeTraverse(node => (subTreeSum += node.key), node15);
235
239
  expect(subTreeSum).toBe(70);
236
240
 
237
- const lesserSum = objBST.lesserSum(10);
241
+ let lesserSum = 0;
242
+ objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
238
243
  expect(lesserSum).toBe(45);
239
244
 
240
245
  expect(node15).toBeInstanceOf(BSTNode);
@@ -242,18 +247,18 @@ describe('Individual package BST operations test', () => {
242
247
  const node11 = objBST.get(11);
243
248
  expect(node11).toBeInstanceOf(BSTNode);
244
249
 
245
- const dfsInorderNodes = objBST.dfs('in', 'node');
250
+ const dfsInorderNodes = objBST.dfs(node => node, 'in');
246
251
  expect(dfsInorderNodes[0].key).toBe(1);
247
252
  expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
248
253
 
249
254
  objBST.perfectlyBalance();
250
255
  expect(objBST.isPerfectlyBalanced()).toBe(true);
251
256
 
252
- const bfsNodesAfterBalanced = objBST.bfs('node');
257
+ const bfsNodesAfterBalanced = objBST.bfs(node => node);
253
258
  expect(bfsNodesAfterBalanced[0].key).toBe(8);
254
259
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
255
260
 
256
- const removed11 = objBST.remove(11);
261
+ const removed11 = objBST.delete(11);
257
262
  expect(removed11).toBeInstanceOf(Array);
258
263
  expect(removed11[0]).toBeDefined();
259
264
  expect(removed11[0].deleted).toBeDefined();
@@ -264,7 +269,7 @@ describe('Individual package BST operations test', () => {
264
269
 
265
270
  expect(node15 && objBST.getHeight(node15)).toBe(2);
266
271
 
267
- const removed1 = objBST.remove(1);
272
+ const removed1 = objBST.delete(1);
268
273
  expect(removed1).toBeInstanceOf(Array);
269
274
  expect(removed1[0]).toBeDefined();
270
275
  expect(removed1[0].deleted).toBeDefined();
@@ -274,7 +279,7 @@ describe('Individual package BST operations test', () => {
274
279
 
275
280
  expect(objBST.getHeight()).toBe(4);
276
281
 
277
- const removed4 = objBST.remove(4);
282
+ const removed4 = objBST.delete(4);
278
283
  expect(removed4).toBeInstanceOf(Array);
279
284
  expect(removed4[0]).toBeDefined();
280
285
  expect(removed4[0].deleted).toBeDefined();
@@ -282,7 +287,7 @@ describe('Individual package BST operations test', () => {
282
287
  expect(objBST.isAVLBalanced()).toBe(true);
283
288
  expect(objBST.getHeight()).toBe(4);
284
289
 
285
- const removed10 = objBST.remove(10);
290
+ const removed10 = objBST.delete(10);
286
291
  expect(removed10).toBeInstanceOf(Array);
287
292
  expect(removed10[0]).toBeDefined();
288
293
  expect(removed10[0].deleted).toBeDefined();
@@ -290,7 +295,7 @@ describe('Individual package BST operations test', () => {
290
295
  expect(objBST.isAVLBalanced()).toBe(false);
291
296
  expect(objBST.getHeight()).toBe(4);
292
297
 
293
- const removed15 = objBST.remove(15);
298
+ const removed15 = objBST.delete(15);
294
299
  expect(removed15).toBeInstanceOf(Array);
295
300
  expect(removed15[0]).toBeDefined();
296
301
  expect(removed15[0].deleted).toBeDefined();
@@ -299,7 +304,7 @@ describe('Individual package BST operations test', () => {
299
304
  expect(objBST.isAVLBalanced()).toBe(true);
300
305
  expect(objBST.getHeight()).toBe(3);
301
306
 
302
- const removed5 = objBST.remove(5);
307
+ const removed5 = objBST.delete(5);
303
308
  expect(removed5).toBeInstanceOf(Array);
304
309
  expect(removed5[0]).toBeDefined();
305
310
  expect(removed5[0].deleted).toBeDefined();
@@ -308,7 +313,7 @@ describe('Individual package BST operations test', () => {
308
313
  expect(objBST.isAVLBalanced()).toBe(true);
309
314
  expect(objBST.getHeight()).toBe(3);
310
315
 
311
- const removed13 = objBST.remove(13);
316
+ const removed13 = objBST.delete(13);
312
317
  expect(removed13).toBeInstanceOf(Array);
313
318
  expect(removed13[0]).toBeDefined();
314
319
  expect(removed13[0].deleted).toBeDefined();
@@ -316,7 +321,7 @@ describe('Individual package BST operations test', () => {
316
321
  expect(objBST.isAVLBalanced()).toBe(true);
317
322
  expect(objBST.getHeight()).toBe(3);
318
323
 
319
- const removed3 = objBST.remove(3);
324
+ const removed3 = objBST.delete(3);
320
325
  expect(removed3).toBeInstanceOf(Array);
321
326
  expect(removed3[0]).toBeDefined();
322
327
  expect(removed3[0].deleted).toBeDefined();
@@ -324,7 +329,7 @@ describe('Individual package BST operations test', () => {
324
329
  expect(objBST.isAVLBalanced()).toBe(false);
325
330
  expect(objBST.getHeight()).toBe(3);
326
331
 
327
- const removed8 = objBST.remove(8);
332
+ const removed8 = objBST.delete(8);
328
333
  expect(removed8).toBeInstanceOf(Array);
329
334
  expect(removed8[0]).toBeDefined();
330
335
  expect(removed8[0].deleted).toBeDefined();
@@ -332,16 +337,16 @@ describe('Individual package BST operations test', () => {
332
337
  expect(objBST.isAVLBalanced()).toBe(true);
333
338
  expect(objBST.getHeight()).toBe(3);
334
339
 
335
- const removed6 = objBST.remove(6);
340
+ const removed6 = objBST.delete(6);
336
341
  expect(removed6).toBeInstanceOf(Array);
337
342
  expect(removed6[0]).toBeDefined();
338
343
  expect(removed6[0].deleted).toBeDefined();
339
344
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
340
- expect(objBST.remove(6).length).toBe(0);
345
+ expect(objBST.delete(6).length).toBe(0);
341
346
  expect(objBST.isAVLBalanced()).toBe(false);
342
347
  expect(objBST.getHeight()).toBe(3);
343
348
 
344
- const removed7 = objBST.remove(7);
349
+ const removed7 = objBST.delete(7);
345
350
  expect(removed7).toBeInstanceOf(Array);
346
351
  expect(removed7[0]).toBeDefined();
347
352
  expect(removed7[0].deleted).toBeDefined();
@@ -349,7 +354,7 @@ describe('Individual package BST operations test', () => {
349
354
  expect(objBST.isAVLBalanced()).toBe(false);
350
355
  expect(objBST.getHeight()).toBe(3);
351
356
 
352
- const removed9 = objBST.remove(9);
357
+ const removed9 = objBST.delete(9);
353
358
  expect(removed9).toBeInstanceOf(Array);
354
359
  expect(removed9[0]).toBeDefined();
355
360
  expect(removed9[0].deleted).toBeDefined();
@@ -357,7 +362,7 @@ describe('Individual package BST operations test', () => {
357
362
  expect(objBST.isAVLBalanced()).toBe(false);
358
363
  expect(objBST.getHeight()).toBe(3);
359
364
 
360
- const removed14 = objBST.remove(14);
365
+ const removed14 = objBST.delete(14);
361
366
  expect(removed14).toBeInstanceOf(Array);
362
367
  expect(removed14[0]).toBeDefined();
363
368
  expect(removed14[0].deleted).toBeDefined();
@@ -372,7 +377,7 @@ describe('Individual package BST operations test', () => {
372
377
  expect(bfsIDs[1]).toBe(12);
373
378
  expect(bfsIDs[2]).toBe(16);
374
379
 
375
- const bfsNodes = objBST.bfs('node');
380
+ const bfsNodes = objBST.bfs(node => node);
376
381
  expect(bfsNodes[0].key).toBe(2);
377
382
  expect(bfsNodes[1].key).toBe(12);
378
383
  expect(bfsNodes[2].key).toBe(16);
@@ -144,3 +144,53 @@ describe('BinaryTree', () => {
144
144
  expect(binaryTree.root).toBeNull();
145
145
  });
146
146
  });
147
+
148
+ describe('BinaryTree Morris Traversal', () => {
149
+ // Create a binary tree
150
+ const tree = new BinaryTree<BinaryTreeNode<number>>();
151
+ tree.add(1);
152
+ tree.add(2);
153
+ tree.add(3);
154
+ tree.add(4);
155
+ tree.add(5);
156
+ it('should perform in-order Morris traversal correctly as dfs traversal', () => {
157
+ // Perform in-order Morris traversal
158
+ const result = tree.morris(node => node.key, 'in');
159
+
160
+ // Expected in-order traversal result
161
+ const expected = [4, 2, 5, 1, 3];
162
+
163
+ expect(result).toEqual(expected);
164
+ expect(tree.dfs(node => node.key, 'in')).toEqual(expected);
165
+ });
166
+
167
+ it('should perform pre-order Morris traversal correctly as dfs traversal', () => {
168
+ // Perform pre-order Morris traversal
169
+ const result = tree.morris(node => node.key, 'pre');
170
+
171
+ // Expected pre-order traversal result
172
+ const expected = [1, 2, 4, 5, 3];
173
+
174
+ expect(result).toEqual(expected);
175
+ expect(tree.dfs(node => node.key, 'pre')).toEqual(expected);
176
+ });
177
+
178
+ it('should perform post-order Morris traversal correctly as dfs traversal', () => {
179
+ // Perform post-order Morris traversal
180
+ const result = tree.morris(node => node.key, 'post');
181
+
182
+ // Expected post-order traversal result
183
+ const expected = [4, 5, 2, 3, 1];
184
+
185
+ expect(result).toEqual([4, 5, 2, 3, 1]);
186
+ expect(tree.dfs(node => node.key, 'post')).toEqual(expected);
187
+ });
188
+
189
+ it('after morris traversals should the structure of the tree be correct', () => {
190
+ const node1 = tree.get(1);
191
+ const node2 = tree.get(2);
192
+ const node3 = tree.get(3);
193
+ expect(node1?.left).toBe(node2);
194
+ expect(node1?.right).toBe(node3);
195
+ });
196
+ });
@@ -1,6 +1,7 @@
1
1
  import {BST, BSTNode, CP} from '../../../../src';
2
+ import {isDebugTest} from '../../../config';
2
3
 
3
- const isDebug = true;
4
+ const isDebug = isDebugTest;
4
5
 
5
6
  describe('BST operations test', () => {
6
7
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
@@ -444,4 +445,10 @@ describe('BST Performance test', function () {
444
445
  isDebug && console.log('---listLevels', arr);
445
446
  isDebug && console.log('---listLevels', performance.now() - startL);
446
447
  });
448
+
449
+ it('should the lastKey of a BST to be the largest key', function () {
450
+ const bst = new BST();
451
+ bst.addMany([9, 8, 7, 3, 1, 2, 5, 4, 6], undefined, false);
452
+ expect(bst.lastKey()).toBe(9);
453
+ });
447
454
  });
@@ -1,6 +1,7 @@
1
1
  import {CP, TreeMultiset, TreeMultisetNode} from '../../../../src';
2
+ import {isDebugTest} from '../../../config';
2
3
 
3
- const isDebug = false;
4
+ const isDebug = isDebugTest;
4
5
  describe('TreeMultiset operations test', () => {
5
6
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
6
7
  const treeMultiset = new TreeMultiset();
@@ -30,6 +30,6 @@ describe('LinkedList Performance Test', () => {
30
30
  }
31
31
  }
32
32
 
33
- expect(doublyListPushCost).toBeLessThan(bigO.SQUARED * 5);
33
+ expect(doublyListPushCost).toBeLessThan(bigO.SQUARED * 10);
34
34
  });
35
35
  });
@@ -1,6 +1,7 @@
1
1
  import {AnyFunction} from '../types';
2
+ import {isDebugTest} from '../config';
2
3
 
3
- const isDebug = false;
4
+ const isDebug = isDebugTest;
4
5
  const orderReducedBy = 2; // reduction of bigO's order compared to the baseline bigO
5
6
 
6
7
  export const magnitude = {