data-structure-typed 1.33.0 → 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 +196 -257
- package/coverage/coverage-final.json +64 -64
- package/coverage/coverage-summary.json +16 -16
- package/dist/data-structures/binary-tree/abstract-binary-tree.js +1 -16
- package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/avl-tree.js +2 -2
- package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/rb-tree.js +3 -4
- package/dist/data-structures/binary-tree/rb-tree.js.map +1 -1
- 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/graph/directed-graph.js.map +1 -1
- package/dist/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/data-structures/hash/hash-table.js +107 -2
- package/dist/data-structures/hash/hash-table.js.map +1 -1
- package/dist/data-structures/heap/max-heap.js.map +1 -1
- package/dist/data-structures/heap/min-heap.js.map +1 -1
- package/dist/data-structures/linked-list/doubly-linked-list.js +30 -0
- package/dist/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/data-structures/matrix/matrix2d.js +5 -8
- package/dist/data-structures/matrix/matrix2d.js.map +1 -1
- package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/data-structures/priority-queue/min-priority-queue.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/dist/data-structures/queue/deque.js.map +1 -1
- package/docs/index.html +196 -256
- package/docs/modules.html +2 -0
- package/lib/data-structures/binary-tree/abstract-binary-tree.d.ts +8 -18
- package/lib/data-structures/binary-tree/abstract-binary-tree.js +5 -23
- package/lib/data-structures/binary-tree/avl-tree.d.ts +7 -10
- package/lib/data-structures/binary-tree/avl-tree.js +6 -9
- package/lib/data-structures/binary-tree/binary-tree.d.ts +2 -2
- package/lib/data-structures/binary-tree/bst.d.ts +2 -2
- package/lib/data-structures/binary-tree/rb-tree.d.ts +3 -3
- package/lib/data-structures/binary-tree/rb-tree.js +3 -3
- package/lib/data-structures/binary-tree/tree-multiset.d.ts +3 -3
- package/lib/data-structures/binary-tree/tree-multiset.js +1 -1
- package/lib/data-structures/graph/abstract-graph.d.ts +10 -10
- package/lib/data-structures/graph/abstract-graph.js +2 -2
- package/lib/data-structures/graph/directed-graph.d.ts +6 -6
- package/lib/data-structures/graph/directed-graph.js +2 -2
- package/lib/data-structures/graph/map-graph.d.ts +6 -6
- package/lib/data-structures/graph/map-graph.js +2 -2
- package/lib/data-structures/graph/undirected-graph.d.ts +6 -6
- package/lib/data-structures/graph/undirected-graph.js +2 -2
- package/lib/data-structures/hash/hash-table.d.ts +61 -1
- package/lib/data-structures/hash/hash-table.js +136 -0
- package/lib/data-structures/heap/heap.d.ts +31 -31
- package/lib/data-structures/heap/heap.js +11 -11
- package/lib/data-structures/heap/max-heap.d.ts +4 -4
- package/lib/data-structures/heap/max-heap.js +1 -1
- package/lib/data-structures/heap/min-heap.d.ts +4 -4
- package/lib/data-structures/heap/min-heap.js +1 -1
- package/lib/data-structures/linked-list/doubly-linked-list.d.ts +93 -54
- package/lib/data-structures/linked-list/doubly-linked-list.js +79 -22
- package/lib/data-structures/linked-list/singly-linked-list.d.ts +46 -46
- package/lib/data-structures/linked-list/singly-linked-list.js +20 -20
- package/lib/data-structures/matrix/matrix.d.ts +3 -3
- package/lib/data-structures/matrix/matrix2d.d.ts +1 -1
- package/lib/data-structures/matrix/matrix2d.js +3 -2
- package/lib/data-structures/priority-queue/max-priority-queue.d.ts +4 -4
- package/lib/data-structures/priority-queue/min-priority-queue.d.ts +4 -4
- package/lib/data-structures/priority-queue/priority-queue.d.ts +26 -26
- package/lib/data-structures/priority-queue/priority-queue.js +8 -8
- package/lib/data-structures/queue/deque.d.ts +30 -30
- package/lib/data-structures/queue/deque.js +7 -7
- package/lib/data-structures/queue/queue.d.ts +27 -27
- package/lib/data-structures/queue/queue.js +8 -8
- package/lib/data-structures/stack/stack.d.ts +15 -15
- package/lib/data-structures/stack/stack.js +6 -6
- package/lib/data-structures/tree/tree.d.ts +7 -7
- package/lib/interfaces/abstract-binary-tree.d.ts +0 -1
- package/lib/interfaces/avl-tree.d.ts +1 -1
- package/lib/types/data-structures/navigator.d.ts +1 -1
- package/package.json +68 -62
- 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/integration/index.html +6 -6
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +14 -17
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +142 -0
- 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 +43 -0
- 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/hash/coordinate-map.test.ts +54 -0
- package/test/unit/data-structures/hash/coordinate-set.test.ts +41 -0
- package/test/unit/data-structures/hash/hash-table.test.ts +97 -0
- 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 +2 -4
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +57 -7
- package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +3 -3
- package/test/unit/data-structures/matrix/matrix.test.ts +54 -0
- package/test/unit/data-structures/matrix/matrix2d.test.ts +138 -0
- package/test/unit/data-structures/matrix/navigator.test.ts +79 -0
- 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 +130 -0
- package/test/unit/data-structures/queue/queue.test.ts +167 -4
- package/test/unit/data-structures/stack/stack.test.ts +67 -0
- package/test/unit/data-structures/tree/tree.test.ts +39 -0
- package/test/unit/data-structures/trie/trie.test.ts +95 -0
- package/test/utils/magnitude.ts +3 -3
- package/tsconfig.json +3 -12
- package/tsconfig.prod.json +25 -0
- package/umd/bundle.min.js +1 -1
- package/umd/bundle.min.js.map +1 -1
- package/.auto-changelog +0 -9
- package/.gitattributes +0 -112
- 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
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html lang=
|
|
2
|
+
<html lang='en'>
|
|
3
3
|
<head>
|
|
4
|
-
<meta charset=
|
|
4
|
+
<meta charset='UTF-8'>
|
|
5
5
|
<title>CDN Test</title>
|
|
6
|
-
<script src=
|
|
6
|
+
<script src='https://cdn.jsdelivr.net/npm/data-structure-typed/umd/bundle.min.js'></script>
|
|
7
7
|
</head>
|
|
8
8
|
<body>
|
|
9
|
-
<div id=
|
|
10
|
-
<ul class=
|
|
9
|
+
<div id='app'>
|
|
10
|
+
<ul class='modules'>
|
|
11
11
|
|
|
12
12
|
</ul>
|
|
13
13
|
</div>
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
last = queue.dequeue();
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
console.log(performance.now() - startTime)
|
|
39
|
+
console.log(performance.now() - startTime);
|
|
40
40
|
</script>
|
|
41
41
|
|
|
42
42
|
</body>
|
|
@@ -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
|
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import {BinaryTreeNode} from '../../../../src';
|
|
2
|
+
import {BinaryTree} from 'binary-tree-typed';
|
|
3
|
+
|
|
4
|
+
describe('BinaryTreeNode', () => {
|
|
5
|
+
it('should create an instance of BinaryTreeNode', () => {
|
|
6
|
+
const node = new BinaryTreeNode<number>(1);
|
|
7
|
+
expect(node).toBeInstanceOf(BinaryTreeNode);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('should set and get the ID correctly', () => {
|
|
11
|
+
const node = new BinaryTreeNode<number>(1);
|
|
12
|
+
expect(node.id).toBe(1);
|
|
13
|
+
|
|
14
|
+
node.id = 2;
|
|
15
|
+
expect(node.id).toBe(2);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('should set and get the value correctly', () => {
|
|
19
|
+
const node = new BinaryTreeNode<number>(1, 42);
|
|
20
|
+
expect(node.val).toBe(42);
|
|
21
|
+
|
|
22
|
+
node.val = 55;
|
|
23
|
+
expect(node.val).toBe(55);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('should set and get the left child correctly', () => {
|
|
27
|
+
const node1 = new BinaryTreeNode<number>(1);
|
|
28
|
+
const node2 = new BinaryTreeNode<number>(2);
|
|
29
|
+
|
|
30
|
+
node1.left = node2;
|
|
31
|
+
|
|
32
|
+
expect(node1.left).toBe(node2);
|
|
33
|
+
expect(node2.parent).toBe(node1);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('should set and get the right child correctly', () => {
|
|
37
|
+
const node1 = new BinaryTreeNode<number>(1);
|
|
38
|
+
const node2 = new BinaryTreeNode<number>(2);
|
|
39
|
+
|
|
40
|
+
node1.right = node2;
|
|
41
|
+
|
|
42
|
+
expect(node1.right).toBe(node2);
|
|
43
|
+
expect(node2.parent).toBe(node1);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should set and get the parent correctly', () => {
|
|
47
|
+
const node1 = new BinaryTreeNode<number>(1);
|
|
48
|
+
const node2 = new BinaryTreeNode<number>(2);
|
|
49
|
+
|
|
50
|
+
node1.left = node2;
|
|
51
|
+
|
|
52
|
+
expect(node2.parent).toBe(node1);
|
|
53
|
+
expect(node1.left).toBe(node2);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('should set and get the height correctly', () => {
|
|
57
|
+
const node = new BinaryTreeNode<number>(1);
|
|
58
|
+
expect(node.height).toBe(0);
|
|
59
|
+
|
|
60
|
+
node.height = 3;
|
|
61
|
+
expect(node.height).toBe(3);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should determine family position correctly', () => {
|
|
65
|
+
const root = new BinaryTreeNode<number>(1);
|
|
66
|
+
const leftChild = new BinaryTreeNode<number>(2);
|
|
67
|
+
const rightChild = new BinaryTreeNode<number>(3);
|
|
68
|
+
|
|
69
|
+
root.left = leftChild;
|
|
70
|
+
root.right = rightChild;
|
|
71
|
+
|
|
72
|
+
expect(leftChild.familyPosition).toBe('LEFT');
|
|
73
|
+
expect(rightChild.familyPosition).toBe('RIGHT');
|
|
74
|
+
expect(root.familyPosition).toBe('ROOT');
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe('BinaryTree', () => {
|
|
79
|
+
let binaryTree: BinaryTree;
|
|
80
|
+
|
|
81
|
+
beforeEach(() => {
|
|
82
|
+
binaryTree = new BinaryTree();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
afterEach(() => {
|
|
86
|
+
binaryTree.clear();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test('should add a node', () => {
|
|
90
|
+
const node = binaryTree.add(1);
|
|
91
|
+
expect(node).not.toBeNull();
|
|
92
|
+
expect(binaryTree.size).toBe(1);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test('should remove a node', () => {
|
|
96
|
+
const node = binaryTree.add(1);
|
|
97
|
+
expect(binaryTree.size).toBe(1);
|
|
98
|
+
|
|
99
|
+
if (node) {
|
|
100
|
+
const result = binaryTree.remove(node);
|
|
101
|
+
expect(result).toHaveLength(1);
|
|
102
|
+
expect(binaryTree.size).toBe(0);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test('should add and find nodes', () => {
|
|
107
|
+
binaryTree.add(1);
|
|
108
|
+
binaryTree.add(2);
|
|
109
|
+
binaryTree.add(3);
|
|
110
|
+
|
|
111
|
+
expect(binaryTree.has(1)).toBe(true);
|
|
112
|
+
expect(binaryTree.has(2)).toBe(true);
|
|
113
|
+
expect(binaryTree.has(3)).toBe(true);
|
|
114
|
+
expect(binaryTree.has(4)).toBe(false);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('should traverse in-order', () => {
|
|
118
|
+
binaryTree.add(4);
|
|
119
|
+
binaryTree.add(2);
|
|
120
|
+
binaryTree.add(6);
|
|
121
|
+
binaryTree.add(1);
|
|
122
|
+
binaryTree.add(3);
|
|
123
|
+
binaryTree.add(5);
|
|
124
|
+
binaryTree.add(7);
|
|
125
|
+
|
|
126
|
+
const inOrder = binaryTree.DFS('in');
|
|
127
|
+
|
|
128
|
+
expect(inOrder).toEqual([1, 2, 3, 4, 5, 6, 7]);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test('should clear the tree', () => {
|
|
132
|
+
binaryTree.add(1);
|
|
133
|
+
binaryTree.add(2);
|
|
134
|
+
|
|
135
|
+
expect(binaryTree.size).toBe(2);
|
|
136
|
+
|
|
137
|
+
binaryTree.clear();
|
|
138
|
+
|
|
139
|
+
expect(binaryTree.size).toBe(0);
|
|
140
|
+
expect(binaryTree.root).toBeNull();
|
|
141
|
+
});
|
|
142
|
+
});
|
|
@@ -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
|
});
|