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.
- package/CHANGELOG.md +3 -1
- package/README.md +8 -0
- package/dist/data-structures/binary-tree/avl-tree.d.ts +5 -5
- package/dist/data-structures/binary-tree/avl-tree.js +6 -6
- package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/binary-tree.d.ts +18 -95
- package/dist/data-structures/binary-tree/binary-tree.js +82 -183
- package/dist/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/bst.d.ts +6 -20
- package/dist/data-structures/binary-tree/bst.js +22 -122
- package/dist/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/data-structures/binary-tree/tree-multiset.d.ts +6 -67
- package/dist/data-structures/binary-tree/tree-multiset.js +10 -257
- package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -1
- package/dist/data-structures/graph/abstract-graph.js +4 -3
- package/dist/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/data-structures/hash/hash-map.d.ts +1 -1
- package/dist/data-structures/hash/hash-map.js +1 -1
- package/dist/data-structures/hash/hash-table.d.ts +3 -3
- package/dist/data-structures/hash/hash-table.js +3 -3
- package/dist/data-structures/heap/heap.js.map +1 -1
- package/dist/data-structures/linked-list/skip-linked-list.d.ts +3 -3
- package/dist/data-structures/linked-list/skip-linked-list.js +3 -3
- package/dist/data-structures/queue/deque.d.ts +2 -2
- package/dist/data-structures/queue/deque.js +2 -2
- package/dist/data-structures/queue/queue.js +1 -1
- package/dist/data-structures/trie/trie.d.ts +2 -2
- package/dist/data-structures/trie/trie.js +2 -2
- package/dist/interfaces/binary-tree.d.ts +1 -1
- package/lib/data-structures/binary-tree/avl-tree.d.ts +5 -5
- package/lib/data-structures/binary-tree/avl-tree.js +6 -6
- package/lib/data-structures/binary-tree/binary-tree.d.ts +18 -95
- package/lib/data-structures/binary-tree/binary-tree.js +82 -183
- package/lib/data-structures/binary-tree/bst.d.ts +6 -20
- package/lib/data-structures/binary-tree/bst.js +22 -122
- package/lib/data-structures/binary-tree/tree-multiset.d.ts +6 -67
- package/lib/data-structures/binary-tree/tree-multiset.js +10 -257
- package/lib/data-structures/graph/abstract-graph.js +4 -3
- package/lib/data-structures/hash/hash-map.d.ts +1 -1
- package/lib/data-structures/hash/hash-map.js +1 -1
- package/lib/data-structures/hash/hash-table.d.ts +3 -3
- package/lib/data-structures/hash/hash-table.js +3 -3
- package/lib/data-structures/linked-list/skip-linked-list.d.ts +3 -3
- package/lib/data-structures/linked-list/skip-linked-list.js +3 -3
- package/lib/data-structures/queue/deque.d.ts +2 -2
- package/lib/data-structures/queue/deque.js +2 -2
- package/lib/data-structures/queue/queue.js +1 -1
- package/lib/data-structures/trie/trie.d.ts +2 -2
- package/lib/data-structures/trie/trie.js +2 -2
- package/lib/interfaces/binary-tree.d.ts +1 -1
- package/package.json +9 -7
- package/src/data-structures/binary-tree/avl-tree.ts +6 -6
- package/src/data-structures/binary-tree/binary-tree.ts +85 -274
- package/src/data-structures/binary-tree/bst.ts +22 -106
- package/src/data-structures/binary-tree/rb-tree.ts +3 -3
- package/src/data-structures/binary-tree/tree-multiset.ts +10 -249
- package/src/data-structures/graph/abstract-graph.ts +4 -3
- package/src/data-structures/hash/hash-map.ts +1 -1
- package/src/data-structures/hash/hash-table.ts +3 -3
- package/src/data-structures/heap/heap.ts +5 -2
- package/src/data-structures/linked-list/skip-linked-list.ts +3 -3
- package/src/data-structures/queue/deque.ts +2 -2
- package/src/data-structures/queue/queue.ts +1 -1
- package/src/data-structures/trie/trie.ts +2 -2
- package/src/interfaces/binary-tree.ts +1 -1
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +19 -17
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/bst.test.ts +72 -35
- package/test/unit/data-structures/binary-tree/overall.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +67 -37
- package/test/unit/data-structures/graph/directed-graph.test.ts +1 -1
- package/test/unit/data-structures/graph/undirected-graph.test.ts +1 -1
- package/test/unit/data-structures/hash/hash-map.test.ts +2 -2
- package/test/unit/data-structures/hash/hash-table.test.ts +5 -5
- package/test/unit/data-structures/heap/heap.test.ts +15 -12
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +7 -7
- package/test/unit/data-structures/linked-list/skip-list.test.ts +2 -2
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +1 -1
- package/test/unit/data-structures/queue/deque.test.ts +20 -3
- package/test/unit/data-structures/queue/queue.test.ts +42 -0
- package/test/unit/data-structures/trie/trie.test.ts +5 -5
- package/test/utils/big-o.ts +64 -57
- package/umd/bundle.min.js +1 -1
- 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
|
-
|
|
25
|
+
let subTreeSum = 0;
|
|
26
|
+
node15 && tree.subTreeForeach(node15, node => (subTreeSum += node.key));
|
|
26
27
|
expect(subTreeSum).toBe(70);
|
|
27
28
|
|
|
28
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
82
|
-
expect(tree.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
-
|
|
38
|
+
let subTreeSum = 0;
|
|
39
|
+
node15 && bst.subTreeForeach(15, node => (subTreeSum += node.key));
|
|
37
40
|
expect(subTreeSum).toBe(70);
|
|
38
41
|
|
|
39
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
239
|
+
let subTreeSum = 0;
|
|
240
|
+
node15 && objBST.subTreeForeach(node15, node => (subTreeSum += node.key));
|
|
235
241
|
expect(subTreeSum).toBe(70);
|
|
236
242
|
|
|
237
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|