data-structure-typed 1.52.5 → 1.52.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +2 -2
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/tree/tree.js +2 -0
- package/dist/cjs/data-structures/tree/tree.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +2 -2
- package/dist/mjs/data-structures/tree/tree.js +2 -0
- package/dist/umd/data-structure-typed.js +4 -2
- package/dist/umd/data-structure-typed.min.js +2 -2
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +6 -6
- package/src/data-structures/binary-tree/binary-tree.ts +2 -2
- package/test/integration/avl-tree.test.ts +1 -1
- package/test/integration/bst.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +106 -103
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "data-structure-typed",
|
|
3
|
-
"version": "1.52.
|
|
3
|
+
"version": "1.52.6",
|
|
4
4
|
"description": "Javascript Data Structure. Heap, Binary Tree, Red Black Tree, Linked List, Deque, Trie, HashMap, Directed Graph, Undirected Graph, Binary Search Tree(BST), AVL Tree, Priority Queue, Graph, Queue, Tree Multiset, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Queue, Min Heap, Min Priority Queue, Stack. Benchmark compared with C++ STL. API aligned with ES6 and Java.util. Usability is comparable to Python",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/mjs/index.js",
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
|
67
67
|
"@typescript-eslint/parser": "^6.7.4",
|
|
68
68
|
"auto-changelog": "^2.4.0",
|
|
69
|
-
"avl-tree-typed": "^1.52.
|
|
69
|
+
"avl-tree-typed": "^1.52.5",
|
|
70
70
|
"benchmark": "^2.1.4",
|
|
71
|
-
"binary-tree-typed": "^1.52.
|
|
72
|
-
"bst-typed": "^1.52.
|
|
73
|
-
"data-structure-typed": "^1.52.
|
|
71
|
+
"binary-tree-typed": "^1.52.5",
|
|
72
|
+
"bst-typed": "^1.52.5",
|
|
73
|
+
"data-structure-typed": "^1.52.5",
|
|
74
74
|
"dependency-cruiser": "^14.1.0",
|
|
75
75
|
"doctoc": "^2.2.1",
|
|
76
76
|
"eslint": "^8.50.0",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
80
80
|
"eslint-plugin-import": "^2.28.1",
|
|
81
81
|
"fast-glob": "^3.3.1",
|
|
82
|
-
"heap-typed": "^1.52.
|
|
82
|
+
"heap-typed": "^1.52.5",
|
|
83
83
|
"istanbul-badges-readme": "^1.8.5",
|
|
84
84
|
"jest": "^29.7.0",
|
|
85
85
|
"js-sdsl": "^4.4.2",
|
|
@@ -335,7 +335,7 @@ export class BinaryTree<
|
|
|
335
335
|
* @returns a boolean value.
|
|
336
336
|
*/
|
|
337
337
|
isRealNodeOrNull(node: R | BTNKeyOrNodeOrEntry<K, V, NODE>): node is NODE | null {
|
|
338
|
-
return this.isRealNode(node)
|
|
338
|
+
return node === null || this.isRealNode(node);
|
|
339
339
|
}
|
|
340
340
|
|
|
341
341
|
/**
|
|
@@ -1843,7 +1843,7 @@ export class BinaryTree<
|
|
|
1843
1843
|
if (includeNull) return this.isRealNodeOrNull(node);
|
|
1844
1844
|
return this.isRealNode(node);
|
|
1845
1845
|
},
|
|
1846
|
-
shouldProcessRoot: (node: OptBTNOrNull<NODE>) => boolean = node =>
|
|
1846
|
+
shouldProcessRoot: (node: OptBTNOrNull<NODE>) => boolean = node => this.isRealNodeOrNull(node)
|
|
1847
1847
|
): ReturnType<C>[] {
|
|
1848
1848
|
beginRoot = this.ensureNode(beginRoot);
|
|
1849
1849
|
if (!beginRoot) return [];
|
|
@@ -36,7 +36,7 @@ describe('AVL Tree Test', () => {
|
|
|
36
36
|
expect(getMinNodeByRoot?.key).toBe(1);
|
|
37
37
|
|
|
38
38
|
const node15 = tree.getNode(15);
|
|
39
|
-
const getMinNodeBySpecificNode = node15 && tree.getLeftMost(node15);
|
|
39
|
+
const getMinNodeBySpecificNode = node15 && tree.getLeftMost(node => node, node15);
|
|
40
40
|
expect(getMinNodeBySpecificNode?.key).toBe(12);
|
|
41
41
|
|
|
42
42
|
let subTreeSum = 0;
|
|
@@ -30,7 +30,7 @@ describe('Individual package BST operations test', () => {
|
|
|
30
30
|
expect(leftMost?.key).toBe(1);
|
|
31
31
|
|
|
32
32
|
const node15 = bst.getNode(15);
|
|
33
|
-
const minNodeBySpecificNode = node15 && bst.getLeftMost(node15);
|
|
33
|
+
const minNodeBySpecificNode = node15 && bst.getLeftMost(node => node, node15);
|
|
34
34
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
35
35
|
|
|
36
36
|
let subTreeSum = 0;
|
|
@@ -230,7 +230,7 @@ describe('Individual package BST operations test', () => {
|
|
|
230
230
|
key: 15,
|
|
231
231
|
keyA: 15
|
|
232
232
|
});
|
|
233
|
-
const minNodeBySpecificNode = node15 && objBST.getLeftMost(node15);
|
|
233
|
+
const minNodeBySpecificNode = node15 && objBST.getLeftMost(node => node, node15);
|
|
234
234
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
235
235
|
|
|
236
236
|
let subTreeSum = 0;
|
|
@@ -848,110 +848,113 @@ describe('BinaryTree toEntryFn', () => {
|
|
|
848
848
|
});
|
|
849
849
|
|
|
850
850
|
describe('BinaryTree traversals', () => {
|
|
851
|
-
|
|
851
|
+
it('traversals', () => {
|
|
852
|
+
const tree = new BinaryTree<number>();
|
|
853
|
+
|
|
854
|
+
const arr = [35, 20, 40, 15, 29, null, 50, null, 16, 28, 30, 45, 55];
|
|
855
|
+
tree.refill(arr);
|
|
856
|
+
expect(tree.bfs(node => node, tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
857
|
+
35,
|
|
858
|
+
20,
|
|
859
|
+
40,
|
|
860
|
+
15,
|
|
861
|
+
29,
|
|
862
|
+
null,
|
|
863
|
+
50,
|
|
864
|
+
null,
|
|
865
|
+
16,
|
|
866
|
+
28,
|
|
867
|
+
30,
|
|
868
|
+
45,
|
|
869
|
+
55
|
|
870
|
+
]);
|
|
871
|
+
expect(tree.bfs(node => node, tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
872
|
+
35,
|
|
873
|
+
20,
|
|
874
|
+
40,
|
|
875
|
+
15,
|
|
876
|
+
29,
|
|
877
|
+
null,
|
|
878
|
+
50,
|
|
879
|
+
null,
|
|
880
|
+
16,
|
|
881
|
+
28,
|
|
882
|
+
30,
|
|
883
|
+
45,
|
|
884
|
+
55
|
|
885
|
+
]);
|
|
886
|
+
expect(tree.bfs(node => node, tree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual([
|
|
887
|
+
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
888
|
+
]);
|
|
889
|
+
expect(tree.bfs(node => node, tree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual([
|
|
890
|
+
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
891
|
+
]);
|
|
892
|
+
|
|
893
|
+
expect(tree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
|
|
894
|
+
expect(tree.dfs(node => node.key, 'PRE', tree.root, 'RECURSIVE')).toEqual([
|
|
895
|
+
35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
|
|
896
|
+
]);
|
|
897
|
+
expect(tree.dfs(node => node, 'PRE', tree.root, 'ITERATIVE', true).map(node => (node === null ? null : node.key))).toEqual([
|
|
898
|
+
35,
|
|
899
|
+
20,
|
|
900
|
+
15,
|
|
901
|
+
null,
|
|
902
|
+
16,
|
|
903
|
+
29,
|
|
904
|
+
28,
|
|
905
|
+
30,
|
|
906
|
+
40,
|
|
907
|
+
null,
|
|
908
|
+
50,
|
|
909
|
+
45,
|
|
910
|
+
55
|
|
911
|
+
]);
|
|
912
|
+
expect(tree.dfs(node => node, 'PRE', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
913
|
+
35,
|
|
914
|
+
20,
|
|
915
|
+
15,
|
|
916
|
+
null,
|
|
917
|
+
16,
|
|
918
|
+
29,
|
|
919
|
+
28,
|
|
920
|
+
30,
|
|
921
|
+
40,
|
|
922
|
+
null,
|
|
923
|
+
50,
|
|
924
|
+
45,
|
|
925
|
+
55
|
|
926
|
+
]);
|
|
927
|
+
|
|
928
|
+
expect(tree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
|
|
929
|
+
expect(tree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
|
|
930
|
+
expect(tree.dfs(node => node.key, 'POST', tree.root, 'RECURSIVE')).toEqual([
|
|
931
|
+
16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
|
|
932
|
+
]);
|
|
933
|
+
expect(tree.bfs(node => node.key, tree.root, 'RECURSIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
|
|
934
|
+
expect(tree.bfs(node => node.key, tree.root, 'ITERATIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
|
|
935
|
+
|
|
936
|
+
expect(tree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
|
|
937
|
+
|
|
938
|
+
expect(tree.listLevels(node => node.key, tree.root, 'RECURSIVE')).toEqual([
|
|
939
|
+
[35],
|
|
940
|
+
[20, 40],
|
|
941
|
+
[15, 29, 50],
|
|
942
|
+
[16, 28, 30, 45, 55]
|
|
943
|
+
]);
|
|
944
|
+
expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'ITERATIVE', true)).toEqual([
|
|
945
|
+
[35],
|
|
946
|
+
[20, 40],
|
|
947
|
+
[15, 29, null, 50],
|
|
948
|
+
[null, 16, 28, 30, 45, 55]
|
|
949
|
+
]);
|
|
950
|
+
expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'RECURSIVE', true)).toEqual([
|
|
951
|
+
[35],
|
|
952
|
+
[20, 40],
|
|
953
|
+
[15, 29, null, 50],
|
|
954
|
+
[null, 16, 28, 30, 45, 55]
|
|
955
|
+
]);
|
|
956
|
+
})
|
|
852
957
|
|
|
853
|
-
const arr = [35, 20, 40, 15, 29, null, 50, null, 16, 28, 30, 45, 55];
|
|
854
|
-
tree.refill(arr);
|
|
855
|
-
expect(tree.bfs(node => node, tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
856
|
-
35,
|
|
857
|
-
20,
|
|
858
|
-
40,
|
|
859
|
-
15,
|
|
860
|
-
29,
|
|
861
|
-
null,
|
|
862
|
-
50,
|
|
863
|
-
null,
|
|
864
|
-
16,
|
|
865
|
-
28,
|
|
866
|
-
30,
|
|
867
|
-
45,
|
|
868
|
-
55
|
|
869
|
-
]);
|
|
870
|
-
expect(tree.bfs(node => node, tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
871
|
-
35,
|
|
872
|
-
20,
|
|
873
|
-
40,
|
|
874
|
-
15,
|
|
875
|
-
29,
|
|
876
|
-
null,
|
|
877
|
-
50,
|
|
878
|
-
null,
|
|
879
|
-
16,
|
|
880
|
-
28,
|
|
881
|
-
30,
|
|
882
|
-
45,
|
|
883
|
-
55
|
|
884
|
-
]);
|
|
885
|
-
expect(tree.bfs(node => node, tree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual([
|
|
886
|
-
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
887
|
-
]);
|
|
888
|
-
expect(tree.bfs(node => node, tree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual([
|
|
889
|
-
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
890
|
-
]);
|
|
891
|
-
|
|
892
|
-
expect(tree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
|
|
893
|
-
expect(tree.dfs(node => node.key, 'PRE', tree.root, 'RECURSIVE')).toEqual([
|
|
894
|
-
35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
|
|
895
|
-
]);
|
|
896
|
-
expect(tree.dfs(node => node, 'PRE', tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
897
|
-
35,
|
|
898
|
-
20,
|
|
899
|
-
15,
|
|
900
|
-
null,
|
|
901
|
-
16,
|
|
902
|
-
29,
|
|
903
|
-
28,
|
|
904
|
-
30,
|
|
905
|
-
40,
|
|
906
|
-
null,
|
|
907
|
-
50,
|
|
908
|
-
45,
|
|
909
|
-
55
|
|
910
|
-
]);
|
|
911
|
-
expect(tree.dfs(node => node, 'PRE', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
912
|
-
35,
|
|
913
|
-
20,
|
|
914
|
-
15,
|
|
915
|
-
null,
|
|
916
|
-
16,
|
|
917
|
-
29,
|
|
918
|
-
28,
|
|
919
|
-
30,
|
|
920
|
-
40,
|
|
921
|
-
null,
|
|
922
|
-
50,
|
|
923
|
-
45,
|
|
924
|
-
55
|
|
925
|
-
]);
|
|
926
|
-
|
|
927
|
-
expect(tree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
|
|
928
|
-
expect(tree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
|
|
929
|
-
expect(tree.dfs(node => node.key, 'POST', tree.root, 'RECURSIVE')).toEqual([
|
|
930
|
-
16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
|
|
931
|
-
]);
|
|
932
|
-
expect(tree.bfs(node => node.key, tree.root, 'RECURSIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
|
|
933
|
-
expect(tree.bfs(node => node.key, tree.root, 'ITERATIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
|
|
934
|
-
|
|
935
|
-
expect(tree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
|
|
936
|
-
|
|
937
|
-
expect(tree.listLevels(node => node.key, tree.root, 'RECURSIVE')).toEqual([
|
|
938
|
-
[35],
|
|
939
|
-
[20, 40],
|
|
940
|
-
[15, 29, 50],
|
|
941
|
-
[16, 28, 30, 45, 55]
|
|
942
|
-
]);
|
|
943
|
-
expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'ITERATIVE', true)).toEqual([
|
|
944
|
-
[35],
|
|
945
|
-
[20, 40],
|
|
946
|
-
[15, 29, null, 50],
|
|
947
|
-
[null, 16, 28, 30, 45, 55]
|
|
948
|
-
]);
|
|
949
|
-
expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'RECURSIVE', true)).toEqual([
|
|
950
|
-
[35],
|
|
951
|
-
[20, 40],
|
|
952
|
-
[15, 29, null, 50],
|
|
953
|
-
[null, 16, 28, 30, 45, 55]
|
|
954
|
-
]);
|
|
955
958
|
});
|
|
956
959
|
|
|
957
960
|
describe('BinaryTree', () => {
|