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
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {BSTNode} from '../../data-structures/binary-tree';
|
|
2
|
+
import type {BinaryTreeOptions} from './binary-tree';
|
|
3
|
+
import {BinaryTreeNodeId} from './abstract-binary-tree';
|
|
4
|
+
|
|
5
|
+
export type BSTComparator = (a: BinaryTreeNodeId, b: BinaryTreeNodeId) => number;
|
|
6
|
+
|
|
7
|
+
// prettier-ignore
|
|
8
|
+
export type BSTNodeNested<T> = BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
9
|
+
export type BSTOptions = BinaryTreeOptions & {
|
|
10
|
+
comparator?: BSTComparator,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export enum CP {lt = 'lt', eq = 'eq', gt = 'gt'}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './binary-tree';
|
|
2
|
+
export * from './bst';
|
|
3
|
+
export * from './avl-tree';
|
|
4
|
+
export * from './segment-tree';
|
|
5
|
+
export * from './tree-multiset';
|
|
6
|
+
export * from './abstract-graph';
|
|
7
|
+
export * from './map-graph';
|
|
8
|
+
export * from './abstract-binary-tree';
|
|
9
|
+
export * from './rb-tree';
|
|
10
|
+
export * from './directed-graph';
|
|
11
|
+
export * from './priority-queue';
|
|
12
|
+
export * from './heap';
|
|
13
|
+
export * from './singly-linked-list';
|
|
14
|
+
export * from './doubly-linked-list';
|
|
15
|
+
export * from './navigator';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type MapGraphCoordinate = [number, number];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Direction = 'up' | 'right' | 'down' | 'left';
|
|
2
|
+
export type Turning = {[key in Direction]: Direction};
|
|
3
|
+
|
|
4
|
+
export type NavigatorParams<T = any> = {
|
|
5
|
+
matrix: T[][];
|
|
6
|
+
turning: Turning;
|
|
7
|
+
onMove: (cur: [number, number]) => void;
|
|
8
|
+
init: {
|
|
9
|
+
cur: [number, number];
|
|
10
|
+
charDir: Direction;
|
|
11
|
+
VISITED: T;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {BinaryTreeOptions} from './binary-tree';
|
|
2
|
+
import {RBTreeNode} from '../../data-structures/binary-tree';
|
|
3
|
+
|
|
4
|
+
export enum RBColor { RED = 'RED', BLACK = 'BLACK'}
|
|
5
|
+
|
|
6
|
+
export type RBTreeNodeNested<T> = RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, RBTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
|
|
8
|
+
export type RBTreeOptions = BinaryTreeOptions & {}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type SegmentTreeNodeVal = number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import {TreeMultisetNode} from '../../data-structures/binary-tree';
|
|
2
|
+
import {AVLTreeOptions} from './avl-tree';
|
|
3
|
+
|
|
4
|
+
export type TreeMultisetNodeNested<T> = TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, TreeMultisetNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
|
|
6
|
+
export type TreeMultisetOptions = Omit<AVLTreeOptions, 'isMergeDuplicatedNodeById'> & {}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type ToThunkFn = () => ReturnType<TrlFn>;
|
|
2
|
+
export type Thunk = () => ReturnType<ToThunkFn> & {__THUNK__: symbol};
|
|
3
|
+
export type TrlFn = (...args: any[]) => any;
|
|
4
|
+
export type TrlAsyncFn = (...args: any[]) => any;
|
|
5
|
+
|
|
6
|
+
export type SpecifyOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type KeyValueObject = {[key: string]: any};
|
|
2
|
+
|
|
3
|
+
export type KeyValueObjectWithId = {[key: string]: any; id: string | number | symbol};
|
|
4
|
+
|
|
5
|
+
export type NonNumberNonObjectButDefined = string | boolean | symbol | null;
|
|
6
|
+
|
|
7
|
+
export type ObjectWithoutId = Omit<KeyValueObject, 'id'>;
|
|
8
|
+
|
|
9
|
+
export type ObjectWithNonNumberId = {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
id: string | boolean | symbol | null | object | undefined;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type ObjectWithNumberId = {
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
id: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type RestrictValById =
|
|
20
|
+
| NonNumberNonObjectButDefined
|
|
21
|
+
| ObjectWithoutId
|
|
22
|
+
| ObjectWithNonNumberId
|
|
23
|
+
| ObjectWithNumberId;
|
|
24
|
+
|
|
25
|
+
export type DummyAny =
|
|
26
|
+
| string
|
|
27
|
+
| number
|
|
28
|
+
| boolean
|
|
29
|
+
| null
|
|
30
|
+
| undefined
|
|
31
|
+
| object
|
|
32
|
+
| symbol
|
|
33
|
+
| void
|
|
34
|
+
| ((...args: []) => any)
|
|
35
|
+
| never;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './utils';
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* data-structure-typed
|
|
3
|
+
*
|
|
4
|
+
* @author Tyler Zeng
|
|
5
|
+
* @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
|
|
6
|
+
* @license MIT License
|
|
7
|
+
*/
|
|
8
|
+
import type {Thunk, ToThunkFn, TrlAsyncFn, TrlFn} from '../types';
|
|
9
|
+
|
|
10
|
+
export const uuidV4 = function () {
|
|
11
|
+
return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function (c) {
|
|
12
|
+
const r = (Math.random() * 16) | 0,
|
|
13
|
+
v = c == 'x' ? r : (r & 0x3) | 0x8;
|
|
14
|
+
return v.toString(16);
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const arrayRemove = function <T>(array: T[], predicate: (item: T, index: number, array: T[]) => boolean): T[] {
|
|
19
|
+
let i = -1,
|
|
20
|
+
len = array ? array.length : 0;
|
|
21
|
+
const result = [];
|
|
22
|
+
|
|
23
|
+
while (++i < len) {
|
|
24
|
+
const value = array[i];
|
|
25
|
+
if (predicate(value, i, array)) {
|
|
26
|
+
result.push(value);
|
|
27
|
+
Array.prototype.splice.call(array, i--, 1);
|
|
28
|
+
len--;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const THUNK_SYMBOL = Symbol('thunk');
|
|
36
|
+
|
|
37
|
+
export const isThunk = (fnOrValue: any) => {
|
|
38
|
+
return typeof fnOrValue === 'function' && fnOrValue.__THUNK__ === THUNK_SYMBOL;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const toThunk = (fn: ToThunkFn): Thunk => {
|
|
42
|
+
const thunk = () => fn();
|
|
43
|
+
thunk.__THUNK__ = THUNK_SYMBOL;
|
|
44
|
+
return thunk;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const trampoline = (fn: TrlFn) => {
|
|
48
|
+
const cont = (...args: [...Parameters<TrlFn>]) => toThunk(() => fn(...args));
|
|
49
|
+
|
|
50
|
+
return Object.assign(
|
|
51
|
+
(...args: [...Parameters<TrlFn>]) => {
|
|
52
|
+
let result = fn(...args);
|
|
53
|
+
|
|
54
|
+
while (isThunk(result) && typeof result === 'function') {
|
|
55
|
+
result = result();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return result;
|
|
59
|
+
},
|
|
60
|
+
{cont}
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const trampolineAsync = (fn: TrlAsyncFn) => {
|
|
65
|
+
const cont = (...args: [...Parameters<TrlAsyncFn>]) => toThunk(() => fn(...args));
|
|
66
|
+
|
|
67
|
+
return Object.assign(
|
|
68
|
+
async (...args: [...Parameters<TrlAsyncFn>]) => {
|
|
69
|
+
let result = await fn(...args);
|
|
70
|
+
|
|
71
|
+
while (isThunk(result) && typeof result === 'function') {
|
|
72
|
+
result = await result();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return result;
|
|
76
|
+
},
|
|
77
|
+
{cont}
|
|
78
|
+
);
|
|
79
|
+
};
|
|
@@ -2,7 +2,6 @@ import {AVLTree} from 'avl-tree-typed';
|
|
|
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
|
|
|
@@ -26,7 +26,6 @@ describe('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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('Individual package 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
|
});
|