data-structure-typed 1.37.0 → 1.37.2
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/dist/data-structures/binary-tree/binary-tree.d.ts +36 -200
- package/dist/data-structures/binary-tree/binary-tree.js +79 -231
- package/dist/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/bst.d.ts +9 -8
- package/dist/data-structures/binary-tree/bst.js +37 -25
- package/dist/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/data-structures/binary-tree/tree-multiset.d.ts +1 -35
- package/dist/data-structures/binary-tree/tree-multiset.js +1 -79
- package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -1
- package/dist/data-structures/heap/heap.d.ts +1 -1
- package/dist/data-structures/heap/heap.js +1 -1
- package/dist/types/data-structures/binary-tree.d.ts +2 -0
- package/dist/types/data-structures/index.d.ts +2 -0
- package/lib/data-structures/binary-tree/binary-tree.d.ts +36 -200
- package/lib/data-structures/binary-tree/binary-tree.js +79 -231
- package/lib/data-structures/binary-tree/bst.d.ts +9 -8
- package/lib/data-structures/binary-tree/bst.js +37 -25
- package/lib/data-structures/binary-tree/tree-multiset.d.ts +1 -35
- package/lib/data-structures/binary-tree/tree-multiset.js +1 -79
- package/lib/data-structures/heap/heap.d.ts +1 -1
- package/lib/data-structures/heap/heap.js +1 -1
- package/lib/types/data-structures/binary-tree.d.ts +2 -0
- package/lib/types/data-structures/index.d.ts +2 -0
- package/package.json +5 -5
- package/src/data-structures/binary-tree/binary-tree.ts +95 -445
- package/src/data-structures/binary-tree/bst.ts +43 -29
- package/src/data-structures/binary-tree/tree-multiset.ts +2 -84
- package/src/data-structures/heap/heap.ts +1 -1
- package/src/types/data-structures/binary-tree.ts +4 -0
- package/src/types/data-structures/index.ts +3 -0
- package/test/integration/avl-tree.test.ts +19 -16
- package/test/integration/bst.test.ts +37 -33
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +12 -9
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/bst.test.ts +52 -22
- package/test/unit/data-structures/binary-tree/overall.test.ts +2 -1
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +5 -5
- package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +16 -21
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +1 -1
- package/umd/bundle.min.js +1 -1
- package/umd/bundle.min.js.map +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {AVLTree, CP} from '../../../../src';
|
|
1
|
+
import {AVLTree, CP, AVLTreeNode} from '../../../../src';
|
|
2
2
|
|
|
3
3
|
describe('AVL Tree Test', () => {
|
|
4
4
|
it('should perform various operations on a AVL Tree', () => {
|
|
5
5
|
const arr = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
6
|
-
const tree = new AVLTree();
|
|
6
|
+
const tree = new AVLTree<AVLTreeNode<number>>();
|
|
7
7
|
|
|
8
8
|
for (const i of arr) tree.add(i, i);
|
|
9
9
|
|
|
@@ -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
|
|
15
|
+
const getNodeById = tree.get(10);
|
|
16
16
|
expect(getNodeById?.key).toBe(10);
|
|
17
17
|
|
|
18
18
|
const getMinNodeByRoot = tree.getLeftMost();
|
|
@@ -23,22 +23,23 @@ describe('AVL Tree Test', () => {
|
|
|
23
23
|
expect(getMinNodeBySpecificNode?.key).toBe(12);
|
|
24
24
|
|
|
25
25
|
let subTreeSum = 0;
|
|
26
|
-
node15 && tree.
|
|
26
|
+
node15 && tree.subTreeTraverse(node => (subTreeSum += node.key), node15);
|
|
27
27
|
expect(subTreeSum).toBe(70);
|
|
28
28
|
|
|
29
29
|
let lesserSum = 0;
|
|
30
|
-
tree.
|
|
30
|
+
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
|
|
31
31
|
expect(lesserSum).toBe(45);
|
|
32
32
|
|
|
33
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.
|
|
34
34
|
expect(node15?.val).toBe(15);
|
|
35
35
|
|
|
36
|
-
const dfs = tree.dfs(
|
|
36
|
+
const dfs = tree.dfs(node => node, 'in');
|
|
37
37
|
expect(dfs[0].key).toBe(1);
|
|
38
38
|
expect(dfs[dfs.length - 1].key).toBe(16);
|
|
39
39
|
|
|
40
40
|
tree.perfectlyBalance();
|
|
41
|
-
const bfs =
|
|
41
|
+
const bfs: AVLTreeNode<number>[] = [];
|
|
42
|
+
tree.bfs(node => bfs.push(node));
|
|
42
43
|
expect(tree.isPerfectlyBalanced()).toBe(true);
|
|
43
44
|
expect(bfs[0].key).toBe(8);
|
|
44
45
|
expect(bfs[bfs.length - 1].key).toBe(16);
|
|
@@ -97,12 +98,14 @@ describe('AVL Tree Test', () => {
|
|
|
97
98
|
expect(tree.getHeight()).toBe(1);
|
|
98
99
|
|
|
99
100
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
100
|
-
const lastBFSIds =
|
|
101
|
+
const lastBFSIds = new Array<number>();
|
|
102
|
+
tree.bfs(node => lastBFSIds.push(node.key));
|
|
101
103
|
expect(lastBFSIds[0]).toBe(12);
|
|
102
104
|
expect(lastBFSIds[1]).toBe(2);
|
|
103
105
|
expect(lastBFSIds[2]).toBe(16);
|
|
104
106
|
|
|
105
|
-
const lastBFSNodes =
|
|
107
|
+
const lastBFSNodes: AVLTreeNode<number>[] = [];
|
|
108
|
+
tree.bfs(node => lastBFSNodes.push(node));
|
|
106
109
|
expect(lastBFSNodes[0].key).toBe(12);
|
|
107
110
|
expect(lastBFSNodes[1].key).toBe(2);
|
|
108
111
|
expect(lastBFSNodes[2].key).toBe(16);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {BST, BSTNode, CP} from '../../../../src';
|
|
2
2
|
|
|
3
|
-
const isDebug =
|
|
3
|
+
const isDebug = true;
|
|
4
4
|
|
|
5
5
|
describe('BST operations test', () => {
|
|
6
6
|
it('should perform various operations on a Binary Search Tree with numeric values', () => {
|
|
@@ -25,7 +25,7 @@ describe('BST operations test', () => {
|
|
|
25
25
|
const nodeId10 = bst.get(10);
|
|
26
26
|
expect(nodeId10?.key).toBe(10);
|
|
27
27
|
|
|
28
|
-
const nodeVal9 = bst.get(9,
|
|
28
|
+
const nodeVal9 = bst.get(9, node => node.val);
|
|
29
29
|
expect(nodeVal9?.key).toBe(9);
|
|
30
30
|
|
|
31
31
|
const leftMost = bst.getLeftMost();
|
|
@@ -36,11 +36,11 @@ describe('BST operations test', () => {
|
|
|
36
36
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
37
37
|
|
|
38
38
|
let subTreeSum = 0;
|
|
39
|
-
node15 && bst.
|
|
39
|
+
node15 && bst.subTreeTraverse(node => (subTreeSum += node.key), 15);
|
|
40
40
|
expect(subTreeSum).toBe(70);
|
|
41
41
|
|
|
42
42
|
let lesserSum = 0;
|
|
43
|
-
bst.
|
|
43
|
+
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
|
|
44
44
|
expect(lesserSum).toBe(45);
|
|
45
45
|
|
|
46
46
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -48,14 +48,15 @@ describe('BST operations test', () => {
|
|
|
48
48
|
const node11 = bst.get(11);
|
|
49
49
|
expect(node11).toBeInstanceOf(BSTNode);
|
|
50
50
|
|
|
51
|
-
const dfsInorderNodes = bst.dfs(
|
|
51
|
+
const dfsInorderNodes = bst.dfs(node => node, 'in');
|
|
52
52
|
expect(dfsInorderNodes[0].key).toBe(1);
|
|
53
53
|
expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
54
54
|
|
|
55
55
|
bst.perfectlyBalance();
|
|
56
56
|
expect(bst.isPerfectlyBalanced()).toBe(true);
|
|
57
57
|
|
|
58
|
-
const bfsNodesAfterBalanced =
|
|
58
|
+
const bfsNodesAfterBalanced: BSTNode<number>[] = [];
|
|
59
|
+
bst.bfs(node => bfsNodesAfterBalanced.push(node));
|
|
59
60
|
expect(bfsNodesAfterBalanced[0].key).toBe(8);
|
|
60
61
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
61
62
|
|
|
@@ -173,12 +174,14 @@ describe('BST operations test', () => {
|
|
|
173
174
|
|
|
174
175
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
175
176
|
|
|
176
|
-
const bfsIDs =
|
|
177
|
+
const bfsIDs: number[] = [];
|
|
178
|
+
bst.bfs(node => bfsIDs.push(node.key));
|
|
177
179
|
expect(bfsIDs[0]).toBe(2);
|
|
178
180
|
expect(bfsIDs[1]).toBe(12);
|
|
179
181
|
expect(bfsIDs[2]).toBe(16);
|
|
180
182
|
|
|
181
|
-
const bfsNodes =
|
|
183
|
+
const bfsNodes: BSTNode<number>[] = [];
|
|
184
|
+
bst.bfs(node => bfsNodes.push(node));
|
|
182
185
|
expect(bfsNodes[0].key).toBe(2);
|
|
183
186
|
expect(bfsNodes[1].key).toBe(12);
|
|
184
187
|
expect(bfsNodes[2].key).toBe(16);
|
|
@@ -222,10 +225,10 @@ describe('BST operations test', () => {
|
|
|
222
225
|
expect(node6 && objBST.getHeight(node6)).toBe(2);
|
|
223
226
|
expect(node6 && objBST.getDepth(node6)).toBe(3);
|
|
224
227
|
|
|
225
|
-
const nodeId10 = objBST.get(10
|
|
228
|
+
const nodeId10 = objBST.get(10);
|
|
226
229
|
expect(nodeId10?.key).toBe(10);
|
|
227
230
|
|
|
228
|
-
const nodeVal9 = objBST.get(9
|
|
231
|
+
const nodeVal9 = objBST.get(9);
|
|
229
232
|
expect(nodeVal9?.key).toBe(9);
|
|
230
233
|
|
|
231
234
|
const leftMost = objBST.getLeftMost();
|
|
@@ -237,11 +240,11 @@ describe('BST operations test', () => {
|
|
|
237
240
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
238
241
|
|
|
239
242
|
let subTreeSum = 0;
|
|
240
|
-
node15 && objBST.
|
|
243
|
+
node15 && objBST.subTreeTraverse(node => (subTreeSum += node.key), node15);
|
|
241
244
|
expect(subTreeSum).toBe(70);
|
|
242
245
|
|
|
243
246
|
let lesserSum = 0;
|
|
244
|
-
objBST.
|
|
247
|
+
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
|
|
245
248
|
expect(lesserSum).toBe(45);
|
|
246
249
|
|
|
247
250
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -249,14 +252,15 @@ describe('BST operations test', () => {
|
|
|
249
252
|
const node11 = objBST.get(11);
|
|
250
253
|
expect(node11).toBeInstanceOf(BSTNode);
|
|
251
254
|
|
|
252
|
-
const dfsInorderNodes = objBST.dfs(
|
|
255
|
+
const dfsInorderNodes = objBST.dfs(node => node, 'in');
|
|
253
256
|
expect(dfsInorderNodes[0].key).toBe(1);
|
|
254
257
|
expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
255
258
|
|
|
256
259
|
objBST.perfectlyBalance();
|
|
257
260
|
expect(objBST.isPerfectlyBalanced()).toBe(true);
|
|
258
261
|
|
|
259
|
-
const bfsNodesAfterBalanced =
|
|
262
|
+
const bfsNodesAfterBalanced: BSTNode<{key: number; keyA: number}>[] = [];
|
|
263
|
+
objBST.bfs(node => bfsNodesAfterBalanced.push(node));
|
|
260
264
|
expect(bfsNodesAfterBalanced[0].key).toBe(8);
|
|
261
265
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
262
266
|
|
|
@@ -374,12 +378,14 @@ describe('BST operations test', () => {
|
|
|
374
378
|
|
|
375
379
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
376
380
|
|
|
377
|
-
const bfsIDs =
|
|
381
|
+
const bfsIDs: number[] = [];
|
|
382
|
+
objBST.bfs(node => bfsIDs.push(node.key));
|
|
378
383
|
expect(bfsIDs[0]).toBe(2);
|
|
379
384
|
expect(bfsIDs[1]).toBe(12);
|
|
380
385
|
expect(bfsIDs[2]).toBe(16);
|
|
381
386
|
|
|
382
|
-
const bfsNodes =
|
|
387
|
+
const bfsNodes: BSTNode<{key: number; keyA: number}>[] = [];
|
|
388
|
+
objBST.bfs(node => bfsNodes.push(node));
|
|
383
389
|
expect(bfsNodes[0].key).toBe(2);
|
|
384
390
|
expect(bfsNodes[1].key).toBe(12);
|
|
385
391
|
expect(bfsNodes[2].key).toBe(16);
|
|
@@ -396,11 +402,11 @@ describe('BST Performance test', function () {
|
|
|
396
402
|
|
|
397
403
|
it(`Observe the time consumption of BST.dfs be good`, function () {
|
|
398
404
|
const startDFS = performance.now();
|
|
399
|
-
const dfs = bst.dfs();
|
|
405
|
+
const dfs = bst.dfs(node => node);
|
|
400
406
|
isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
|
|
401
407
|
});
|
|
402
408
|
|
|
403
|
-
it('Should the time consumption of
|
|
409
|
+
it('Should the time consumption of lesserOrGreaterTraverse fitting O(n log n)', function () {
|
|
404
410
|
const nodes: number[] = [];
|
|
405
411
|
for (let i = 0; i < inputSize; i++) {
|
|
406
412
|
nodes.push(i);
|
|
@@ -409,9 +415,33 @@ describe('BST Performance test', function () {
|
|
|
409
415
|
bst.addMany(nodes);
|
|
410
416
|
isDebug && console.log('---add', performance.now() - start);
|
|
411
417
|
const startL = performance.now();
|
|
412
|
-
bst.
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
418
|
+
bst.lesserOrGreaterTraverse(
|
|
419
|
+
node => {
|
|
420
|
+
node.key - 1;
|
|
421
|
+
},
|
|
422
|
+
CP.lt,
|
|
423
|
+
inputSize / 2
|
|
424
|
+
);
|
|
425
|
+
isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
it('Should the time consumption of listLevels fitting well', function () {
|
|
429
|
+
const nodes: number[] = [];
|
|
430
|
+
for (let i = 0; i < inputSize; i++) {
|
|
431
|
+
nodes.push(i);
|
|
432
|
+
}
|
|
433
|
+
const start = performance.now();
|
|
434
|
+
bst.addMany(nodes);
|
|
435
|
+
isDebug && console.log('---add', performance.now() - start);
|
|
436
|
+
const startL = performance.now();
|
|
437
|
+
const arr: number[][] = [];
|
|
438
|
+
bst.bfs((node, level) => {
|
|
439
|
+
if (level !== undefined) {
|
|
440
|
+
if (!arr[level]) arr[level] = [];
|
|
441
|
+
arr[level].push(node.key);
|
|
442
|
+
}
|
|
443
|
+
}, true);
|
|
444
|
+
isDebug && console.log('---listLevels', arr);
|
|
445
|
+
isDebug && console.log('---listLevels', performance.now() - startL);
|
|
416
446
|
});
|
|
417
447
|
});
|
|
@@ -24,7 +24,8 @@ describe('Overall BinaryTree Test', () => {
|
|
|
24
24
|
expect(bst.get(6)).toBeNull();
|
|
25
25
|
bst.isAVLBalanced(); // true or false
|
|
26
26
|
expect(bst.isAVLBalanced()).toBe(true);
|
|
27
|
-
const bfsIDs =
|
|
27
|
+
const bfsIDs: number[] = [];
|
|
28
|
+
bst.bfs(node => bfsIDs.push(node.key));
|
|
28
29
|
bfsIDs[0] === 11; // true
|
|
29
30
|
expect(bfsIDs[0]).toBe(11);
|
|
30
31
|
|
|
@@ -7,7 +7,7 @@ describe('Red-Black Tree Tests', () => {
|
|
|
7
7
|
// tree = new RBTree<RBTreeNode<number>>();
|
|
8
8
|
// });
|
|
9
9
|
|
|
10
|
-
test('Insertion and In-order
|
|
10
|
+
test('Insertion and In-order Traverse', () => {
|
|
11
11
|
// tree.add(5);
|
|
12
12
|
// tree.add(3);
|
|
13
13
|
// tree.add(7);
|
|
@@ -16,9 +16,9 @@ describe('Red-Black Tree Tests', () => {
|
|
|
16
16
|
// tree.add(6);
|
|
17
17
|
// tree.add(8);
|
|
18
18
|
//
|
|
19
|
-
// const
|
|
19
|
+
// const inOrderTraverse: number[] = tree.DFS('in')
|
|
20
20
|
//
|
|
21
|
-
// expect(
|
|
21
|
+
// expect(inOrderTraverse).toEqual([2, 3, 4, 5, 6, 7, 8]);
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
test('Deletion', () => {
|
|
@@ -35,9 +35,9 @@ describe('Red-Black Tree Tests', () => {
|
|
|
35
35
|
// expect(tree.has(3)).toBe(false);
|
|
36
36
|
//
|
|
37
37
|
// // Perform in-order traversal to check if the tree is still balanced
|
|
38
|
-
// const
|
|
38
|
+
// const inOrderTraverse: number[] = tree.DFS('in');
|
|
39
39
|
//
|
|
40
40
|
//
|
|
41
|
-
// expect(
|
|
41
|
+
// expect(inOrderTraverse).toEqual([2, 4, 5, 6, 7, 8]);
|
|
42
42
|
});
|
|
43
43
|
});
|
|
@@ -16,7 +16,6 @@ describe('TreeMultiset operations test', () => {
|
|
|
16
16
|
|
|
17
17
|
expect(treeMultiset.size).toBe(16);
|
|
18
18
|
expect(treeMultiset.count).toBe(18);
|
|
19
|
-
expect(treeMultiset.bfs('key'));
|
|
20
19
|
|
|
21
20
|
expect(treeMultiset.has(6));
|
|
22
21
|
|
|
@@ -25,13 +24,13 @@ describe('TreeMultiset operations test', () => {
|
|
|
25
24
|
const nodeId10 = treeMultiset.get(10);
|
|
26
25
|
expect(nodeId10?.key).toBe(10);
|
|
27
26
|
|
|
28
|
-
const nodeVal9 = treeMultiset.get(9,
|
|
27
|
+
const nodeVal9 = treeMultiset.get(9, node => node.val);
|
|
29
28
|
expect(nodeVal9?.key).toBe(9);
|
|
30
29
|
|
|
31
|
-
const nodesByCount1 = treeMultiset.
|
|
30
|
+
const nodesByCount1 = treeMultiset.getNodes(1, node => node.count);
|
|
32
31
|
expect(nodesByCount1.length).toBe(14);
|
|
33
32
|
|
|
34
|
-
const nodesByCount2 = treeMultiset.
|
|
33
|
+
const nodesByCount2 = treeMultiset.getNodes(2, node => node.count);
|
|
35
34
|
expect(nodesByCount2.length).toBe(2);
|
|
36
35
|
const leftMost = treeMultiset.getLeftMost();
|
|
37
36
|
expect(leftMost?.key).toBe(1);
|
|
@@ -41,29 +40,25 @@ describe('TreeMultiset operations test', () => {
|
|
|
41
40
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
42
41
|
|
|
43
42
|
let subTreeSum = 0;
|
|
44
|
-
node15 && treeMultiset.
|
|
43
|
+
node15 && treeMultiset.subTreeTraverse((node: TreeMultisetNode<number>) => (subTreeSum += node.key), 15);
|
|
45
44
|
expect(subTreeSum).toBe(70);
|
|
46
45
|
let lesserSum = 0;
|
|
47
|
-
treeMultiset.
|
|
46
|
+
treeMultiset.lesserOrGreaterTraverse((node: TreeMultisetNode<number>) => (lesserSum += node.key), CP.lt, 10);
|
|
48
47
|
expect(lesserSum).toBe(45);
|
|
49
48
|
|
|
50
49
|
expect(node15 instanceof TreeMultisetNode);
|
|
51
50
|
if (node15 instanceof TreeMultisetNode) {
|
|
52
|
-
const subTreeAdd = treeMultiset.
|
|
51
|
+
const subTreeAdd = treeMultiset.subTreeTraverse((node: TreeMultisetNode<number>) => (node.count += 1), 15);
|
|
53
52
|
expect(subTreeAdd);
|
|
54
53
|
}
|
|
55
54
|
const node11 = treeMultiset.get(11);
|
|
56
55
|
expect(node11 instanceof TreeMultisetNode);
|
|
57
56
|
if (node11 instanceof TreeMultisetNode) {
|
|
58
|
-
const allGreaterNodesAdded = treeMultiset.
|
|
59
|
-
11,
|
|
60
|
-
CP.gt,
|
|
61
|
-
(node: TreeMultisetNode<number>) => (node.count += 2)
|
|
62
|
-
);
|
|
57
|
+
const allGreaterNodesAdded = treeMultiset.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
|
|
63
58
|
expect(allGreaterNodesAdded);
|
|
64
59
|
}
|
|
65
60
|
|
|
66
|
-
const dfsInorderNodes = treeMultiset.dfs(
|
|
61
|
+
const dfsInorderNodes = treeMultiset.dfs(node => node, 'in');
|
|
67
62
|
expect(dfsInorderNodes[0].key).toBe(1);
|
|
68
63
|
expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
69
64
|
expect(treeMultiset.isPerfectlyBalanced()).toBe(false);
|
|
@@ -73,7 +68,7 @@ describe('TreeMultiset operations test', () => {
|
|
|
73
68
|
expect(treeMultiset.isPerfectlyBalanced()).toBe(true);
|
|
74
69
|
expect(treeMultiset.isAVLBalanced()).toBe(true);
|
|
75
70
|
|
|
76
|
-
const bfsNodesAfterBalanced = treeMultiset.bfs(
|
|
71
|
+
const bfsNodesAfterBalanced = treeMultiset.bfs(node => node);
|
|
77
72
|
expect(bfsNodesAfterBalanced[0].key).toBe(8);
|
|
78
73
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
79
74
|
|
|
@@ -194,13 +189,13 @@ describe('TreeMultiset operations test', () => {
|
|
|
194
189
|
|
|
195
190
|
expect(treeMultiset.isAVLBalanced()).toBe(true);
|
|
196
191
|
|
|
197
|
-
const bfsIDs = treeMultiset.bfs();
|
|
192
|
+
const bfsIDs = treeMultiset.bfs(node => node.key);
|
|
198
193
|
|
|
199
194
|
expect(bfsIDs[0]).toBe(12);
|
|
200
195
|
expect(bfsIDs[1]).toBe(2);
|
|
201
196
|
expect(bfsIDs[2]).toBe(16);
|
|
202
197
|
|
|
203
|
-
const bfsNodes = treeMultiset.bfs(
|
|
198
|
+
const bfsNodes = treeMultiset.bfs(node => node);
|
|
204
199
|
|
|
205
200
|
expect(bfsNodes[0].key).toBe(12);
|
|
206
201
|
expect(bfsNodes[1].key).toBe(2);
|
|
@@ -284,7 +279,7 @@ describe('TreeMultiset operations test', () => {
|
|
|
284
279
|
// expect(allGreaterNodesAdded).toBeDefined();
|
|
285
280
|
// }
|
|
286
281
|
//
|
|
287
|
-
// const dfsInorderNodes = objTreeMultiset.dfs(
|
|
282
|
+
// const dfsInorderNodes = objTreeMultiset.dfs(node => node, 'in');
|
|
288
283
|
// expect(dfsInorderNodes[0].key).toBe(1);
|
|
289
284
|
// expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
290
285
|
//
|
|
@@ -474,18 +469,18 @@ describe('TreeMultiset Performance test', function () {
|
|
|
474
469
|
|
|
475
470
|
it(`Observe the time consumption of TreeMultiset.dfs be good`, function () {
|
|
476
471
|
const startDFS = performance.now();
|
|
477
|
-
const dfs = treeMS.dfs();
|
|
472
|
+
const dfs = treeMS.dfs(node => node);
|
|
478
473
|
isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
|
|
479
474
|
});
|
|
480
475
|
|
|
481
|
-
it('Should the time consumption of
|
|
476
|
+
it('Should the time consumption of lesserOrGreaterTraverse fitting O(n log n)', function () {
|
|
482
477
|
const start = performance.now();
|
|
483
478
|
for (let i = 0; i < inputSize; i++) {
|
|
484
479
|
treeMS.add(i);
|
|
485
480
|
}
|
|
486
481
|
isDebug && console.log('---add', performance.now() - start);
|
|
487
482
|
const startL = performance.now();
|
|
488
|
-
treeMS.
|
|
489
|
-
isDebug && console.log('---
|
|
483
|
+
treeMS.lesserOrGreaterTraverse((node: TreeMultisetNode<number>) => (node.count += 1), CP.lt, inputSize / 2);
|
|
484
|
+
isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
|
|
490
485
|
});
|
|
491
486
|
});
|