data-structure-typed 1.33.2 → 1.33.5
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/{.eslintrc.json → .eslintrc.js} +2 -1
- package/.github/workflows/ci.yml +15 -3
- package/.github/workflows/release-package.yml +32 -0
- package/{.prettierrc → .prettierrc.js} +1 -1
- package/CHANGELOG.md +5 -1
- package/README.md +2 -3
- package/coverage/coverage-final.json +64 -64
- package/dist/data-structures/graph/abstract-graph.js +12 -12
- package/dist/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/data-structures/priority-queue/priority-queue.js +6 -6
- package/dist/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/docs/index.html +2 -3
- package/package.json +68 -60
- package/src/data-structures/binary-tree/aa-tree.ts +1 -0
- package/src/data-structures/binary-tree/abstract-binary-tree.ts +1608 -0
- package/src/data-structures/binary-tree/avl-tree.ts +307 -0
- package/src/data-structures/binary-tree/b-tree.ts +1 -0
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +76 -0
- package/src/data-structures/binary-tree/binary-tree.ts +47 -0
- package/src/data-structures/binary-tree/bst.ts +537 -0
- package/src/data-structures/binary-tree/index.ts +12 -0
- package/src/data-structures/binary-tree/rb-tree.ts +366 -0
- package/src/data-structures/binary-tree/segment-tree.ts +242 -0
- package/src/data-structures/binary-tree/splay-tree.ts +1 -0
- package/src/data-structures/binary-tree/tree-multiset.ts +700 -0
- package/src/data-structures/binary-tree/two-three-tree.ts +1 -0
- package/src/data-structures/graph/abstract-graph.ts +1040 -0
- package/src/data-structures/graph/directed-graph.ts +470 -0
- package/src/data-structures/graph/index.ts +4 -0
- package/src/data-structures/graph/map-graph.ts +129 -0
- package/src/data-structures/graph/undirected-graph.ts +274 -0
- package/src/data-structures/hash/coordinate-map.ts +67 -0
- package/src/data-structures/hash/coordinate-set.ts +56 -0
- package/src/data-structures/hash/hash-table.ts +157 -0
- package/src/data-structures/hash/index.ts +6 -0
- package/src/data-structures/hash/pair.ts +1 -0
- package/src/data-structures/hash/tree-map.ts +1 -0
- package/src/data-structures/hash/tree-set.ts +1 -0
- package/src/data-structures/heap/heap.ts +212 -0
- package/src/data-structures/heap/index.ts +3 -0
- package/src/data-structures/heap/max-heap.ts +31 -0
- package/src/data-structures/heap/min-heap.ts +32 -0
- package/src/data-structures/index.ts +11 -0
- package/src/data-structures/linked-list/doubly-linked-list.ts +636 -0
- package/src/data-structures/linked-list/index.ts +3 -0
- package/src/data-structures/linked-list/singly-linked-list.ts +501 -0
- package/src/data-structures/linked-list/skip-linked-list.ts +1 -0
- package/src/data-structures/matrix/index.ts +4 -0
- package/src/data-structures/matrix/matrix.ts +27 -0
- package/src/data-structures/matrix/matrix2d.ts +213 -0
- package/src/data-structures/matrix/navigator.ts +121 -0
- package/src/data-structures/matrix/vector2d.ts +316 -0
- package/src/data-structures/priority-queue/index.ts +3 -0
- package/src/data-structures/priority-queue/max-priority-queue.ts +56 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +57 -0
- package/src/data-structures/priority-queue/priority-queue.ts +359 -0
- package/src/data-structures/queue/deque.ts +297 -0
- package/src/data-structures/queue/index.ts +2 -0
- package/src/data-structures/queue/queue.ts +191 -0
- package/src/data-structures/stack/index.ts +1 -0
- package/src/data-structures/stack/stack.ts +98 -0
- package/src/data-structures/tree/index.ts +1 -0
- package/src/data-structures/tree/tree.ts +69 -0
- package/src/data-structures/trie/index.ts +1 -0
- package/src/data-structures/trie/trie.ts +225 -0
- package/src/index.ts +4 -0
- package/src/interfaces/abstract-binary-tree.ts +189 -0
- package/src/interfaces/abstract-graph.ts +31 -0
- package/src/interfaces/avl-tree.ts +25 -0
- package/src/interfaces/binary-tree.ts +6 -0
- package/src/interfaces/bst.ts +31 -0
- package/src/interfaces/directed-graph.ts +20 -0
- package/src/interfaces/doubly-linked-list.ts +1 -0
- package/src/interfaces/heap.ts +1 -0
- package/src/interfaces/index.ts +15 -0
- package/src/interfaces/navigator.ts +1 -0
- package/src/interfaces/priority-queue.ts +1 -0
- package/src/interfaces/rb-tree.ts +9 -0
- package/src/interfaces/segment-tree.ts +1 -0
- package/src/interfaces/singly-linked-list.ts +1 -0
- package/src/interfaces/tree-multiset.ts +7 -0
- package/src/interfaces/undirected-graph.ts +6 -0
- package/src/types/data-structures/abstract-binary-tree.ts +50 -0
- package/src/types/data-structures/abstract-graph.ts +11 -0
- package/src/types/data-structures/avl-tree.ts +5 -0
- package/src/types/data-structures/binary-tree.ts +5 -0
- package/src/types/data-structures/bst.ts +13 -0
- package/src/types/data-structures/directed-graph.ts +8 -0
- package/src/types/data-structures/doubly-linked-list.ts +1 -0
- package/src/types/data-structures/heap.ts +5 -0
- package/src/types/data-structures/index.ts +15 -0
- package/src/types/data-structures/map-graph.ts +1 -0
- package/src/types/data-structures/navigator.ts +13 -0
- package/src/types/data-structures/priority-queue.ts +9 -0
- package/src/types/data-structures/rb-tree.ts +8 -0
- package/src/types/data-structures/segment-tree.ts +1 -0
- package/src/types/data-structures/singly-linked-list.ts +1 -0
- package/src/types/data-structures/tree-multiset.ts +6 -0
- package/src/types/helpers.ts +1 -0
- package/src/types/index.ts +3 -0
- package/src/types/utils/index.ts +2 -0
- package/src/types/utils/utils.ts +6 -0
- package/src/types/utils/validate-type.ts +35 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/utils.ts +79 -0
- package/test/integration/avl-tree.test.ts +14 -17
- package/test/integration/bst.test.ts +50 -41
- package/test/integration/heap.test.js +0 -3
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +14 -17
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +0 -4
- package/test/unit/data-structures/binary-tree/bst.test.ts +50 -41
- package/test/unit/data-structures/binary-tree/overall.test.ts +36 -28
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +0 -1
- package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +23 -12
- package/test/unit/data-structures/graph/directed-graph.test.ts +27 -25
- package/test/unit/data-structures/graph/map-graph.test.ts +4 -5
- package/test/unit/data-structures/graph/overall.test.ts +10 -11
- package/test/unit/data-structures/graph/undirected-graph.test.ts +0 -1
- package/test/unit/data-structures/heap/heap.test.ts +7 -8
- package/test/unit/data-structures/heap/max-heap.test.ts +7 -5
- package/test/unit/data-structures/heap/min-heap.test.ts +6 -5
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +8 -9
- package/test/unit/data-structures/linked-list/linked-list.test.ts +1 -1
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +4 -7
- package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +3 -3
- package/test/unit/data-structures/matrix/matrix.test.ts +4 -4
- package/test/unit/data-structures/matrix/navigator.test.ts +4 -5
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +5 -7
- package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +13 -13
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +8 -8
- package/test/unit/data-structures/queue/deque.test.ts +0 -1
- package/test/unit/data-structures/queue/queue.test.ts +1 -5
- package/test/unit/data-structures/trie/trie.test.ts +2 -2
- package/test/utils/magnitude.ts +3 -3
- package/tsconfig.json +3 -12
- package/tsconfig.prod.json +25 -0
- package/.auto-changelog +0 -9
- package/.gitattributes +0 -112
- package/.idea/codeStyles/Project.xml +0 -61
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/data-structure-typed.iml +0 -19
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/.prettierignore +0 -6
- package/webpack.config.js +0 -28
|
@@ -2,7 +2,6 @@ import {AVLTree} from '../../../../src';
|
|
|
2
2
|
|
|
3
3
|
describe('AVL Tree Test', () => {
|
|
4
4
|
it('should perform various operations on a AVL Tree', () => {
|
|
5
|
-
|
|
6
5
|
const arr = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
7
6
|
const tree = new AVLTree();
|
|
8
7
|
|
|
@@ -16,7 +15,6 @@ describe('AVL Tree Test', () => {
|
|
|
16
15
|
const getNodeById = tree.get(10, 'id');
|
|
17
16
|
expect(getNodeById?.id).toBe(10);
|
|
18
17
|
|
|
19
|
-
|
|
20
18
|
const getMinNodeByRoot = tree.getLeftMost();
|
|
21
19
|
expect(getMinNodeByRoot?.id).toBe(1);
|
|
22
20
|
|
|
@@ -30,7 +28,6 @@ describe('AVL Tree Test', () => {
|
|
|
30
28
|
const lesserSum = tree.lesserSum(10);
|
|
31
29
|
expect(lesserSum).toBe(45);
|
|
32
30
|
|
|
33
|
-
|
|
34
31
|
// 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.
|
|
35
32
|
expect(node15?.val).toBe(15);
|
|
36
33
|
|
|
@@ -44,56 +41,56 @@ describe('AVL Tree Test', () => {
|
|
|
44
41
|
expect(bfs[0].id).toBe(8);
|
|
45
42
|
expect(bfs[bfs.length - 1].id).toBe(16);
|
|
46
43
|
|
|
47
|
-
expect(tree.remove(11
|
|
44
|
+
expect(tree.remove(11)[0].deleted?.id).toBe(11);
|
|
48
45
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
49
46
|
expect(node15 && tree.getHeight(node15)).toBe(2);
|
|
50
47
|
|
|
51
|
-
expect(tree.remove(1
|
|
48
|
+
expect(tree.remove(1)[0].deleted?.id).toBe(1);
|
|
52
49
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
53
50
|
expect(tree.getHeight()).toBe(4);
|
|
54
51
|
|
|
55
|
-
expect(tree.remove(4
|
|
52
|
+
expect(tree.remove(4)[0].deleted?.id).toBe(4);
|
|
56
53
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
57
54
|
expect(tree.getHeight()).toBe(4);
|
|
58
55
|
|
|
59
|
-
expect(tree.remove(10
|
|
56
|
+
expect(tree.remove(10)[0].deleted?.id).toBe(10);
|
|
60
57
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
61
58
|
expect(tree.getHeight()).toBe(3);
|
|
62
59
|
|
|
63
|
-
expect(tree.remove(15
|
|
60
|
+
expect(tree.remove(15)[0].deleted?.id).toBe(15);
|
|
64
61
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
65
62
|
|
|
66
63
|
expect(tree.getHeight()).toBe(3);
|
|
67
64
|
|
|
68
|
-
expect(tree.remove(5
|
|
65
|
+
expect(tree.remove(5)[0].deleted?.id).toBe(5);
|
|
69
66
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
70
67
|
expect(tree.getHeight()).toBe(3);
|
|
71
68
|
|
|
72
|
-
expect(tree.remove(13
|
|
69
|
+
expect(tree.remove(13)[0].deleted?.id).toBe(13);
|
|
73
70
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
74
71
|
expect(tree.getHeight()).toBe(3);
|
|
75
72
|
|
|
76
|
-
expect(tree.remove(3
|
|
73
|
+
expect(tree.remove(3)[0].deleted?.id).toBe(3);
|
|
77
74
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
78
75
|
expect(tree.getHeight()).toBe(3);
|
|
79
76
|
|
|
80
|
-
expect(tree.remove(8
|
|
77
|
+
expect(tree.remove(8)[0].deleted?.id).toBe(8);
|
|
81
78
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
82
79
|
expect(tree.getHeight()).toBe(3);
|
|
83
80
|
|
|
84
|
-
expect(tree.remove(6
|
|
85
|
-
expect(tree.remove(6
|
|
81
|
+
expect(tree.remove(6)[0].deleted?.id).toBe(6);
|
|
82
|
+
expect(tree.remove(6).length).toBe(0);
|
|
86
83
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
87
84
|
expect(tree.getHeight()).toBe(2);
|
|
88
85
|
|
|
89
|
-
expect(tree.remove(7
|
|
86
|
+
expect(tree.remove(7)[0].deleted?.id).toBe(7);
|
|
90
87
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
91
88
|
expect(tree.getHeight()).toBe(2);
|
|
92
89
|
|
|
93
|
-
expect(tree.remove(9
|
|
90
|
+
expect(tree.remove(9)[0].deleted?.id).toBe(9);
|
|
94
91
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
95
92
|
expect(tree.getHeight()).toBe(2);
|
|
96
|
-
expect(tree.remove(14
|
|
93
|
+
expect(tree.remove(14)[0].deleted?.id).toBe(14);
|
|
97
94
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
98
95
|
expect(tree.getHeight()).toBe(1);
|
|
99
96
|
|
|
@@ -75,7 +75,6 @@ describe('BinaryTreeNode', () => {
|
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
77
|
|
|
78
|
-
|
|
79
78
|
describe('BinaryTree', () => {
|
|
80
79
|
let binaryTree: BinaryTree;
|
|
81
80
|
|
|
@@ -102,10 +101,8 @@ describe('BinaryTree', () => {
|
|
|
102
101
|
expect(result).toHaveLength(1);
|
|
103
102
|
expect(binaryTree.size).toBe(0);
|
|
104
103
|
}
|
|
105
|
-
|
|
106
104
|
});
|
|
107
105
|
|
|
108
|
-
|
|
109
106
|
test('should add and find nodes', () => {
|
|
110
107
|
binaryTree.add(1);
|
|
111
108
|
binaryTree.add(2);
|
|
@@ -143,4 +140,3 @@ describe('BinaryTree', () => {
|
|
|
143
140
|
expect(binaryTree.root).toBeNull();
|
|
144
141
|
});
|
|
145
142
|
});
|
|
146
|
-
|
|
@@ -26,7 +26,6 @@ describe('BST operations test', () => {
|
|
|
26
26
|
const nodeVal9 = bst.get(9, 'val');
|
|
27
27
|
expect(nodeVal9?.id).toBe(9);
|
|
28
28
|
|
|
29
|
-
|
|
30
29
|
const leftMost = bst.getLeftMost();
|
|
31
30
|
expect(leftMost?.id).toBe(1);
|
|
32
31
|
|
|
@@ -56,7 +55,7 @@ describe('BST operations test', () => {
|
|
|
56
55
|
expect(bfsNodesAfterBalanced[0].id).toBe(8);
|
|
57
56
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].id).toBe(16);
|
|
58
57
|
|
|
59
|
-
const removed11 = bst.remove(11
|
|
58
|
+
const removed11 = bst.remove(11);
|
|
60
59
|
expect(removed11).toBeInstanceOf(Array);
|
|
61
60
|
expect(removed11[0]).toBeDefined();
|
|
62
61
|
expect(removed11[0].deleted).toBeDefined();
|
|
@@ -67,7 +66,7 @@ describe('BST operations test', () => {
|
|
|
67
66
|
|
|
68
67
|
expect(bst.getHeight(15)).toBe(1);
|
|
69
68
|
|
|
70
|
-
const removed1 = bst.remove(1
|
|
69
|
+
const removed1 = bst.remove(1);
|
|
71
70
|
expect(removed1).toBeInstanceOf(Array);
|
|
72
71
|
expect(removed1[0]).toBeDefined();
|
|
73
72
|
expect(removed1[0].deleted).toBeDefined();
|
|
@@ -77,7 +76,7 @@ describe('BST operations test', () => {
|
|
|
77
76
|
|
|
78
77
|
expect(bst.getHeight()).toBe(4);
|
|
79
78
|
|
|
80
|
-
const removed4 = bst.remove(4
|
|
79
|
+
const removed4 = bst.remove(4);
|
|
81
80
|
expect(removed4).toBeInstanceOf(Array);
|
|
82
81
|
expect(removed4[0]).toBeDefined();
|
|
83
82
|
expect(removed4[0].deleted).toBeDefined();
|
|
@@ -85,7 +84,7 @@ describe('BST operations test', () => {
|
|
|
85
84
|
expect(bst.isAVLBalanced()).toBe(true);
|
|
86
85
|
expect(bst.getHeight()).toBe(4);
|
|
87
86
|
|
|
88
|
-
const removed10 = bst.remove(10
|
|
87
|
+
const removed10 = bst.remove(10);
|
|
89
88
|
expect(removed10).toBeInstanceOf(Array);
|
|
90
89
|
expect(removed10[0]).toBeDefined();
|
|
91
90
|
expect(removed10[0].deleted).toBeDefined();
|
|
@@ -93,7 +92,7 @@ describe('BST operations test', () => {
|
|
|
93
92
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
94
93
|
expect(bst.getHeight()).toBe(4);
|
|
95
94
|
|
|
96
|
-
const removed15 = bst.remove(15
|
|
95
|
+
const removed15 = bst.remove(15);
|
|
97
96
|
expect(removed15).toBeInstanceOf(Array);
|
|
98
97
|
expect(removed15[0]).toBeDefined();
|
|
99
98
|
expect(removed15[0].deleted).toBeDefined();
|
|
@@ -102,7 +101,7 @@ describe('BST operations test', () => {
|
|
|
102
101
|
expect(bst.isAVLBalanced()).toBe(true);
|
|
103
102
|
expect(bst.getHeight()).toBe(3);
|
|
104
103
|
|
|
105
|
-
const removed5 = bst.remove(5
|
|
104
|
+
const removed5 = bst.remove(5);
|
|
106
105
|
expect(removed5).toBeInstanceOf(Array);
|
|
107
106
|
expect(removed5[0]).toBeDefined();
|
|
108
107
|
expect(removed5[0].deleted).toBeDefined();
|
|
@@ -111,7 +110,7 @@ describe('BST operations test', () => {
|
|
|
111
110
|
expect(bst.isAVLBalanced()).toBe(true);
|
|
112
111
|
expect(bst.getHeight()).toBe(3);
|
|
113
112
|
|
|
114
|
-
const removed13 = bst.remove(13
|
|
113
|
+
const removed13 = bst.remove(13);
|
|
115
114
|
expect(removed13).toBeInstanceOf(Array);
|
|
116
115
|
expect(removed13[0]).toBeDefined();
|
|
117
116
|
expect(removed13[0].deleted).toBeDefined();
|
|
@@ -119,7 +118,7 @@ describe('BST operations test', () => {
|
|
|
119
118
|
expect(bst.isAVLBalanced()).toBe(true);
|
|
120
119
|
expect(bst.getHeight()).toBe(3);
|
|
121
120
|
|
|
122
|
-
const removed3 = bst.remove(3
|
|
121
|
+
const removed3 = bst.remove(3);
|
|
123
122
|
expect(removed3).toBeInstanceOf(Array);
|
|
124
123
|
expect(removed3[0]).toBeDefined();
|
|
125
124
|
expect(removed3[0].deleted).toBeDefined();
|
|
@@ -127,7 +126,7 @@ describe('BST operations test', () => {
|
|
|
127
126
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
128
127
|
expect(bst.getHeight()).toBe(3);
|
|
129
128
|
|
|
130
|
-
const removed8 = bst.remove(8
|
|
129
|
+
const removed8 = bst.remove(8);
|
|
131
130
|
expect(removed8).toBeInstanceOf(Array);
|
|
132
131
|
expect(removed8[0]).toBeDefined();
|
|
133
132
|
expect(removed8[0].deleted).toBeDefined();
|
|
@@ -135,16 +134,16 @@ describe('BST operations test', () => {
|
|
|
135
134
|
expect(bst.isAVLBalanced()).toBe(true);
|
|
136
135
|
expect(bst.getHeight()).toBe(3);
|
|
137
136
|
|
|
138
|
-
const removed6 = bst.remove(6
|
|
137
|
+
const removed6 = bst.remove(6);
|
|
139
138
|
expect(removed6).toBeInstanceOf(Array);
|
|
140
139
|
expect(removed6[0]).toBeDefined();
|
|
141
140
|
expect(removed6[0].deleted).toBeDefined();
|
|
142
141
|
if (removed6[0].deleted) expect(removed6[0].deleted.id).toBe(6);
|
|
143
|
-
expect(bst.remove(6
|
|
142
|
+
expect(bst.remove(6).length).toBe(0);
|
|
144
143
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
145
144
|
expect(bst.getHeight()).toBe(3);
|
|
146
145
|
|
|
147
|
-
const removed7 = bst.remove(7
|
|
146
|
+
const removed7 = bst.remove(7);
|
|
148
147
|
expect(removed7).toBeInstanceOf(Array);
|
|
149
148
|
expect(removed7[0]).toBeDefined();
|
|
150
149
|
expect(removed7[0].deleted).toBeDefined();
|
|
@@ -152,7 +151,7 @@ describe('BST operations test', () => {
|
|
|
152
151
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
153
152
|
expect(bst.getHeight()).toBe(3);
|
|
154
153
|
|
|
155
|
-
const removed9 = bst.remove(9
|
|
154
|
+
const removed9 = bst.remove(9);
|
|
156
155
|
expect(removed9).toBeInstanceOf(Array);
|
|
157
156
|
expect(removed9[0]).toBeDefined();
|
|
158
157
|
expect(removed9[0].deleted).toBeDefined();
|
|
@@ -160,7 +159,7 @@ describe('BST operations test', () => {
|
|
|
160
159
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
161
160
|
expect(bst.getHeight()).toBe(3);
|
|
162
161
|
|
|
163
|
-
const removed14 = bst.remove(14
|
|
162
|
+
const removed14 = bst.remove(14);
|
|
164
163
|
expect(removed14).toBeInstanceOf(Array);
|
|
165
164
|
expect(removed14[0]).toBeDefined();
|
|
166
165
|
expect(removed14[0].deleted).toBeDefined();
|
|
@@ -168,7 +167,6 @@ describe('BST operations test', () => {
|
|
|
168
167
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
169
168
|
expect(bst.getHeight()).toBe(2);
|
|
170
169
|
|
|
171
|
-
|
|
172
170
|
expect(bst.isAVLBalanced()).toBe(false);
|
|
173
171
|
|
|
174
172
|
const bfsIDs = bst.BFS();
|
|
@@ -180,21 +178,34 @@ describe('BST operations test', () => {
|
|
|
180
178
|
expect(bfsNodes[0].id).toBe(2);
|
|
181
179
|
expect(bfsNodes[1].id).toBe(12);
|
|
182
180
|
expect(bfsNodes[2].id).toBe(16);
|
|
183
|
-
|
|
184
181
|
});
|
|
185
182
|
|
|
186
183
|
it('should perform various operations on a Binary Search Tree with object values', () => {
|
|
187
|
-
const objBST = new BST<BSTNode<{
|
|
184
|
+
const objBST = new BST<BSTNode<{id: number; keyA: number}>>();
|
|
188
185
|
expect(objBST).toBeInstanceOf(BST);
|
|
189
186
|
objBST.add(11, {id: 11, keyA: 11});
|
|
190
187
|
objBST.add(3, {id: 3, keyA: 3});
|
|
191
|
-
const values = [
|
|
192
|
-
{id:
|
|
193
|
-
{id:
|
|
194
|
-
{id:
|
|
195
|
-
{id:
|
|
196
|
-
|
|
197
|
-
|
|
188
|
+
const values = [
|
|
189
|
+
{id: 15, keyA: 15},
|
|
190
|
+
{id: 1, keyA: 1},
|
|
191
|
+
{id: 8, keyA: 8},
|
|
192
|
+
{id: 13, keyA: 13},
|
|
193
|
+
{id: 16, keyA: 16},
|
|
194
|
+
{id: 2, keyA: 2},
|
|
195
|
+
{id: 6, keyA: 6},
|
|
196
|
+
{id: 9, keyA: 9},
|
|
197
|
+
{id: 12, keyA: 12},
|
|
198
|
+
{id: 14, keyA: 14},
|
|
199
|
+
{id: 4, keyA: 4},
|
|
200
|
+
{id: 7, keyA: 7},
|
|
201
|
+
{id: 10, keyA: 10},
|
|
202
|
+
{id: 5, keyA: 5}
|
|
203
|
+
];
|
|
204
|
+
|
|
205
|
+
objBST.addMany(
|
|
206
|
+
values.map(item => item.id),
|
|
207
|
+
values
|
|
208
|
+
);
|
|
198
209
|
|
|
199
210
|
expect(objBST.root).toBeInstanceOf(BSTNode);
|
|
200
211
|
|
|
@@ -242,7 +253,7 @@ describe('BST operations test', () => {
|
|
|
242
253
|
expect(bfsNodesAfterBalanced[0].id).toBe(8);
|
|
243
254
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].id).toBe(16);
|
|
244
255
|
|
|
245
|
-
const removed11 = objBST.remove(11
|
|
256
|
+
const removed11 = objBST.remove(11);
|
|
246
257
|
expect(removed11).toBeInstanceOf(Array);
|
|
247
258
|
expect(removed11[0]).toBeDefined();
|
|
248
259
|
expect(removed11[0].deleted).toBeDefined();
|
|
@@ -253,7 +264,7 @@ describe('BST operations test', () => {
|
|
|
253
264
|
|
|
254
265
|
expect(node15 && objBST.getHeight(node15)).toBe(2);
|
|
255
266
|
|
|
256
|
-
const removed1 = objBST.remove(1
|
|
267
|
+
const removed1 = objBST.remove(1);
|
|
257
268
|
expect(removed1).toBeInstanceOf(Array);
|
|
258
269
|
expect(removed1[0]).toBeDefined();
|
|
259
270
|
expect(removed1[0].deleted).toBeDefined();
|
|
@@ -263,7 +274,7 @@ describe('BST operations test', () => {
|
|
|
263
274
|
|
|
264
275
|
expect(objBST.getHeight()).toBe(4);
|
|
265
276
|
|
|
266
|
-
const removed4 = objBST.remove(4
|
|
277
|
+
const removed4 = objBST.remove(4);
|
|
267
278
|
expect(removed4).toBeInstanceOf(Array);
|
|
268
279
|
expect(removed4[0]).toBeDefined();
|
|
269
280
|
expect(removed4[0].deleted).toBeDefined();
|
|
@@ -271,7 +282,7 @@ describe('BST operations test', () => {
|
|
|
271
282
|
expect(objBST.isAVLBalanced()).toBe(true);
|
|
272
283
|
expect(objBST.getHeight()).toBe(4);
|
|
273
284
|
|
|
274
|
-
const removed10 = objBST.remove(10
|
|
285
|
+
const removed10 = objBST.remove(10);
|
|
275
286
|
expect(removed10).toBeInstanceOf(Array);
|
|
276
287
|
expect(removed10[0]).toBeDefined();
|
|
277
288
|
expect(removed10[0].deleted).toBeDefined();
|
|
@@ -279,7 +290,7 @@ describe('BST operations test', () => {
|
|
|
279
290
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
280
291
|
expect(objBST.getHeight()).toBe(4);
|
|
281
292
|
|
|
282
|
-
const removed15 = objBST.remove(15
|
|
293
|
+
const removed15 = objBST.remove(15);
|
|
283
294
|
expect(removed15).toBeInstanceOf(Array);
|
|
284
295
|
expect(removed15[0]).toBeDefined();
|
|
285
296
|
expect(removed15[0].deleted).toBeDefined();
|
|
@@ -288,7 +299,7 @@ describe('BST operations test', () => {
|
|
|
288
299
|
expect(objBST.isAVLBalanced()).toBe(true);
|
|
289
300
|
expect(objBST.getHeight()).toBe(3);
|
|
290
301
|
|
|
291
|
-
const removed5 = objBST.remove(5
|
|
302
|
+
const removed5 = objBST.remove(5);
|
|
292
303
|
expect(removed5).toBeInstanceOf(Array);
|
|
293
304
|
expect(removed5[0]).toBeDefined();
|
|
294
305
|
expect(removed5[0].deleted).toBeDefined();
|
|
@@ -297,7 +308,7 @@ describe('BST operations test', () => {
|
|
|
297
308
|
expect(objBST.isAVLBalanced()).toBe(true);
|
|
298
309
|
expect(objBST.getHeight()).toBe(3);
|
|
299
310
|
|
|
300
|
-
const removed13 = objBST.remove(13
|
|
311
|
+
const removed13 = objBST.remove(13);
|
|
301
312
|
expect(removed13).toBeInstanceOf(Array);
|
|
302
313
|
expect(removed13[0]).toBeDefined();
|
|
303
314
|
expect(removed13[0].deleted).toBeDefined();
|
|
@@ -305,7 +316,7 @@ describe('BST operations test', () => {
|
|
|
305
316
|
expect(objBST.isAVLBalanced()).toBe(true);
|
|
306
317
|
expect(objBST.getHeight()).toBe(3);
|
|
307
318
|
|
|
308
|
-
const removed3 = objBST.remove(3
|
|
319
|
+
const removed3 = objBST.remove(3);
|
|
309
320
|
expect(removed3).toBeInstanceOf(Array);
|
|
310
321
|
expect(removed3[0]).toBeDefined();
|
|
311
322
|
expect(removed3[0].deleted).toBeDefined();
|
|
@@ -313,7 +324,7 @@ describe('BST operations test', () => {
|
|
|
313
324
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
314
325
|
expect(objBST.getHeight()).toBe(3);
|
|
315
326
|
|
|
316
|
-
const removed8 = objBST.remove(8
|
|
327
|
+
const removed8 = objBST.remove(8);
|
|
317
328
|
expect(removed8).toBeInstanceOf(Array);
|
|
318
329
|
expect(removed8[0]).toBeDefined();
|
|
319
330
|
expect(removed8[0].deleted).toBeDefined();
|
|
@@ -321,16 +332,16 @@ describe('BST operations test', () => {
|
|
|
321
332
|
expect(objBST.isAVLBalanced()).toBe(true);
|
|
322
333
|
expect(objBST.getHeight()).toBe(3);
|
|
323
334
|
|
|
324
|
-
const removed6 = objBST.remove(6
|
|
335
|
+
const removed6 = objBST.remove(6);
|
|
325
336
|
expect(removed6).toBeInstanceOf(Array);
|
|
326
337
|
expect(removed6[0]).toBeDefined();
|
|
327
338
|
expect(removed6[0].deleted).toBeDefined();
|
|
328
339
|
if (removed6[0].deleted) expect(removed6[0].deleted.id).toBe(6);
|
|
329
|
-
expect(objBST.remove(6
|
|
340
|
+
expect(objBST.remove(6).length).toBe(0);
|
|
330
341
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
331
342
|
expect(objBST.getHeight()).toBe(3);
|
|
332
343
|
|
|
333
|
-
const removed7 = objBST.remove(7
|
|
344
|
+
const removed7 = objBST.remove(7);
|
|
334
345
|
expect(removed7).toBeInstanceOf(Array);
|
|
335
346
|
expect(removed7[0]).toBeDefined();
|
|
336
347
|
expect(removed7[0].deleted).toBeDefined();
|
|
@@ -338,7 +349,7 @@ describe('BST operations test', () => {
|
|
|
338
349
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
339
350
|
expect(objBST.getHeight()).toBe(3);
|
|
340
351
|
|
|
341
|
-
const removed9 = objBST.remove(9
|
|
352
|
+
const removed9 = objBST.remove(9);
|
|
342
353
|
expect(removed9).toBeInstanceOf(Array);
|
|
343
354
|
expect(removed9[0]).toBeDefined();
|
|
344
355
|
expect(removed9[0].deleted).toBeDefined();
|
|
@@ -346,7 +357,7 @@ describe('BST operations test', () => {
|
|
|
346
357
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
347
358
|
expect(objBST.getHeight()).toBe(3);
|
|
348
359
|
|
|
349
|
-
const removed14 = objBST.remove(14
|
|
360
|
+
const removed14 = objBST.remove(14);
|
|
350
361
|
expect(removed14).toBeInstanceOf(Array);
|
|
351
362
|
expect(removed14[0]).toBeDefined();
|
|
352
363
|
expect(removed14[0].deleted).toBeDefined();
|
|
@@ -354,7 +365,6 @@ describe('BST operations test', () => {
|
|
|
354
365
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
355
366
|
expect(objBST.getHeight()).toBe(2);
|
|
356
367
|
|
|
357
|
-
|
|
358
368
|
expect(objBST.isAVLBalanced()).toBe(false);
|
|
359
369
|
|
|
360
370
|
const bfsIDs = objBST.BFS();
|
|
@@ -366,6 +376,5 @@ describe('BST operations test', () => {
|
|
|
366
376
|
expect(bfsNodes[0].id).toBe(2);
|
|
367
377
|
expect(bfsNodes[1].id).toBe(12);
|
|
368
378
|
expect(bfsNodes[2].id).toBe(16);
|
|
369
|
-
|
|
370
379
|
});
|
|
371
380
|
});
|
|
@@ -6,52 +6,60 @@ describe('Overall BinaryTree Test', () => {
|
|
|
6
6
|
bst.add(11);
|
|
7
7
|
bst.add(3);
|
|
8
8
|
bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
|
|
9
|
-
bst.size === 16;
|
|
10
|
-
expect(bst.size).toBe(16);
|
|
11
|
-
bst.has(6);
|
|
12
|
-
expect(bst.has(6)).toBe(true);
|
|
13
|
-
const node6 = bst.get(6);
|
|
9
|
+
bst.size === 16; // true
|
|
10
|
+
expect(bst.size).toBe(16); // true
|
|
11
|
+
bst.has(6); // true
|
|
12
|
+
expect(bst.has(6)).toBe(true); // true
|
|
14
13
|
bst.getHeight(6) === 2; // true
|
|
15
|
-
bst.getHeight() === 5;
|
|
16
|
-
bst.getDepth(6) === 3;
|
|
14
|
+
bst.getHeight() === 5; // true
|
|
15
|
+
bst.getDepth(6) === 3; // true
|
|
17
16
|
expect(bst.getHeight(6)).toBe(2); // true
|
|
18
|
-
expect(bst.getHeight()).toBe(5);
|
|
19
|
-
expect(bst.getDepth(6)).toBe(3);
|
|
17
|
+
expect(bst.getHeight()).toBe(5); // true
|
|
18
|
+
expect(bst.getDepth(6)).toBe(3); // true
|
|
20
19
|
const leftMost = bst.getLeftMost();
|
|
21
|
-
leftMost?.id === 1;
|
|
20
|
+
leftMost?.id === 1; // true
|
|
22
21
|
expect(leftMost?.id).toBe(1);
|
|
23
22
|
bst.remove(6);
|
|
24
|
-
bst.get(6);
|
|
23
|
+
bst.get(6); // null
|
|
25
24
|
expect(bst.get(6)).toBeNull();
|
|
26
|
-
bst.isAVLBalanced();
|
|
25
|
+
bst.isAVLBalanced(); // true or false
|
|
27
26
|
expect(bst.isAVLBalanced()).toBe(true);
|
|
28
27
|
const bfsIDs = bst.BFS();
|
|
29
|
-
bfsIDs[0] === 11;
|
|
28
|
+
bfsIDs[0] === 11; // true
|
|
30
29
|
expect(bfsIDs[0]).toBe(11);
|
|
31
30
|
|
|
32
|
-
const objBST = new BST<BSTNode<{
|
|
31
|
+
const objBST = new BST<BSTNode<{id: number; keyA: number}>>();
|
|
33
32
|
objBST.add(11, {id: 11, keyA: 11});
|
|
34
33
|
objBST.add(3, {id: 3, keyA: 3});
|
|
35
34
|
|
|
36
|
-
objBST.addMany(
|
|
35
|
+
objBST.addMany(
|
|
36
|
+
[15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5],
|
|
37
37
|
[
|
|
38
|
-
{id: 15, keyA: 15},
|
|
39
|
-
{id:
|
|
40
|
-
{id:
|
|
41
|
-
{id:
|
|
42
|
-
{id:
|
|
43
|
-
|
|
38
|
+
{id: 15, keyA: 15},
|
|
39
|
+
{id: 1, keyA: 1},
|
|
40
|
+
{id: 8, keyA: 8},
|
|
41
|
+
{id: 13, keyA: 13},
|
|
42
|
+
{id: 16, keyA: 16},
|
|
43
|
+
{id: 2, keyA: 2},
|
|
44
|
+
{id: 6, keyA: 6},
|
|
45
|
+
{id: 9, keyA: 9},
|
|
46
|
+
{id: 12, keyA: 12},
|
|
47
|
+
{id: 14, keyA: 14},
|
|
48
|
+
{id: 4, keyA: 4},
|
|
49
|
+
{id: 7, keyA: 7},
|
|
50
|
+
{id: 10, keyA: 10},
|
|
51
|
+
{id: 5, keyA: 5}
|
|
52
|
+
]
|
|
53
|
+
);
|
|
44
54
|
|
|
45
55
|
objBST.remove(11);
|
|
46
56
|
|
|
47
|
-
|
|
48
57
|
const avlTree = new AVLTree();
|
|
49
|
-
avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5])
|
|
50
|
-
avlTree.isAVLBalanced();
|
|
51
|
-
expect(avlTree.isAVLBalanced()).toBe(true);
|
|
58
|
+
avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
|
|
59
|
+
avlTree.isAVLBalanced(); // true
|
|
60
|
+
expect(avlTree.isAVLBalanced()).toBe(true); // true
|
|
52
61
|
avlTree.remove(10);
|
|
53
|
-
avlTree.isAVLBalanced();
|
|
54
|
-
expect(avlTree.isAVLBalanced()).toBe(true);
|
|
55
|
-
|
|
62
|
+
avlTree.isAVLBalanced(); // true
|
|
63
|
+
expect(avlTree.isAVLBalanced()).toBe(true); // true
|
|
56
64
|
});
|
|
57
65
|
});
|
|
@@ -15,7 +15,7 @@ describe('TreeMultiset operations test', () => {
|
|
|
15
15
|
|
|
16
16
|
expect(treeMultiset.size).toBe(16);
|
|
17
17
|
expect(treeMultiset.count).toBe(18);
|
|
18
|
-
expect(treeMultiset.BFS('id'))
|
|
18
|
+
expect(treeMultiset.BFS('id'));
|
|
19
19
|
|
|
20
20
|
expect(treeMultiset.has(6));
|
|
21
21
|
|
|
@@ -44,7 +44,6 @@ describe('TreeMultiset operations test', () => {
|
|
|
44
44
|
const lesserSum = treeMultiset.lesserSum(10);
|
|
45
45
|
expect(lesserSum).toBe(45);
|
|
46
46
|
|
|
47
|
-
|
|
48
47
|
expect(node15 instanceof TreeMultisetNode);
|
|
49
48
|
if (node15 instanceof TreeMultisetNode) {
|
|
50
49
|
const subTreeAdd = treeMultiset.subTreeAddCount(15, 1);
|
|
@@ -204,17 +203,31 @@ describe('TreeMultiset operations test', () => {
|
|
|
204
203
|
});
|
|
205
204
|
|
|
206
205
|
it('should perform various operations on a Binary Search Tree with object values', () => {
|
|
207
|
-
const objTreeMultiset = new TreeMultiset<TreeMultisetNode<{
|
|
206
|
+
const objTreeMultiset = new TreeMultiset<TreeMultisetNode<{id: number; keyA: number}>>();
|
|
208
207
|
expect(objTreeMultiset).toBeInstanceOf(TreeMultiset);
|
|
209
208
|
objTreeMultiset.add(11, {id: 11, keyA: 11});
|
|
210
209
|
objTreeMultiset.add(3, {id: 3, keyA: 3});
|
|
211
|
-
const values = [
|
|
212
|
-
{id:
|
|
213
|
-
{id:
|
|
214
|
-
{id:
|
|
215
|
-
{id:
|
|
216
|
-
|
|
217
|
-
|
|
210
|
+
const values = [
|
|
211
|
+
{id: 15, keyA: 15},
|
|
212
|
+
{id: 1, keyA: 1},
|
|
213
|
+
{id: 8, keyA: 8},
|
|
214
|
+
{id: 13, keyA: 13},
|
|
215
|
+
{id: 16, keyA: 16},
|
|
216
|
+
{id: 2, keyA: 2},
|
|
217
|
+
{id: 6, keyA: 6},
|
|
218
|
+
{id: 9, keyA: 9},
|
|
219
|
+
{id: 12, keyA: 12},
|
|
220
|
+
{id: 14, keyA: 14},
|
|
221
|
+
{id: 4, keyA: 4},
|
|
222
|
+
{id: 7, keyA: 7},
|
|
223
|
+
{id: 10, keyA: 10},
|
|
224
|
+
{id: 5, keyA: 5}
|
|
225
|
+
];
|
|
226
|
+
|
|
227
|
+
objTreeMultiset.addMany(
|
|
228
|
+
values.map(item => item.id),
|
|
229
|
+
values
|
|
230
|
+
);
|
|
218
231
|
|
|
219
232
|
expect(objTreeMultiset.root).toBeInstanceOf(TreeMultisetNode);
|
|
220
233
|
|
|
@@ -414,7 +427,6 @@ describe('TreeMultiset Performance test', function () {
|
|
|
414
427
|
// }
|
|
415
428
|
|
|
416
429
|
it(`Observe the time consumption of TreeMultiset.add fitting O(n log n)`, function () {
|
|
417
|
-
|
|
418
430
|
// // Create a benchmark suite
|
|
419
431
|
// const suite = new Benchmark.Suite();
|
|
420
432
|
// // Define a function to generate a random array of a given size
|
|
@@ -446,5 +458,4 @@ describe('TreeMultiset Performance test', function () {
|
|
|
446
458
|
// })
|
|
447
459
|
// .run({async: true});
|
|
448
460
|
});
|
|
449
|
-
|
|
450
461
|
});
|