data-structure-typed 1.51.6 → 1.51.8
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/README.md +13 -13
- package/benchmark/report.html +37 -1
- package/benchmark/report.json +405 -3
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -10
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +12 -14
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +7 -13
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +46 -78
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +51 -96
- package/dist/cjs/data-structures/binary-tree/bst.js +120 -218
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +3 -4
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +4 -2
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +1 -0
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +1 -3
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +3 -3
- package/dist/cjs/types/common.d.ts +1 -1
- package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
- package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
- package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +6 -5
- package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
- package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
- package/dist/cjs/types/utils/utils.d.ts +10 -1
- package/dist/cjs/utils/utils.d.ts +2 -1
- package/dist/cjs/utils/utils.js +29 -1
- package/dist/cjs/utils/utils.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -10
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +12 -14
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +7 -13
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +45 -77
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +51 -96
- package/dist/mjs/data-structures/binary-tree/bst.js +122 -221
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +3 -4
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +4 -2
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +1 -0
- package/dist/mjs/data-structures/heap/heap.d.ts +1 -3
- package/dist/mjs/interfaces/binary-tree.d.ts +3 -3
- package/dist/mjs/types/common.d.ts +1 -1
- package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
- package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
- package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +6 -5
- package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
- package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
- package/dist/mjs/types/utils/utils.d.ts +10 -1
- package/dist/mjs/utils/utils.d.ts +2 -1
- package/dist/mjs/utils/utils.js +27 -0
- package/dist/umd/data-structure-typed.js +206 -301
- package/dist/umd/data-structure-typed.min.js +4 -4
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +6 -6
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +5 -12
- package/src/data-structures/binary-tree/avl-tree.ts +15 -15
- package/src/data-structures/binary-tree/binary-tree.ts +56 -76
- package/src/data-structures/binary-tree/bst.ts +132 -224
- package/src/data-structures/binary-tree/rb-tree.ts +9 -6
- package/src/data-structures/binary-tree/tree-multi-map.ts +5 -3
- package/src/data-structures/heap/heap.ts +1 -1
- package/src/interfaces/binary-tree.ts +4 -3
- package/src/types/common.ts +1 -1
- package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +3 -2
- package/src/types/data-structures/binary-tree/avl-tree.ts +3 -2
- package/src/types/data-structures/binary-tree/binary-tree.ts +5 -5
- package/src/types/data-structures/binary-tree/bst.ts +6 -5
- package/src/types/data-structures/binary-tree/rb-tree.ts +4 -3
- package/src/types/data-structures/binary-tree/tree-multi-map.ts +3 -2
- package/src/types/utils/utils.ts +14 -1
- package/src/utils/utils.ts +20 -1
- package/test/integration/all-in-one.test.ts +2 -2
- package/test/integration/index.html +70 -0
- package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +7 -7
- package/test/performance/reportor.ts +2 -3
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +7 -7
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/bst.test.ts +6 -6
- package/test/unit/data-structures/binary-tree/overall.test.ts +24 -20
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +6 -6
- package/test/unit/utils/utils.test.ts +5 -0
- package/test/utils/console.ts +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { AVLTreeMultiMap, AVLTreeMultiMapNode } from '../../../data-structures';
|
|
2
2
|
import type { AVLTreeOptions } from './avl-tree';
|
|
3
|
+
import { Comparable } from "../../utils";
|
|
3
4
|
|
|
4
|
-
export type AVLTreeMultiMapNodeNested<K, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
export type AVLTreeMultiMapNodeNested<K extends Comparable, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
6
|
|
|
6
|
-
export type AVLTreeMultiMapNested<K, V, N extends AVLTreeMultiMapNode<K, V, N>> = AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
export type AVLTreeMultiMapNested<K extends Comparable, V, N extends AVLTreeMultiMapNode<K, V, N>> = AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
8
|
|
|
8
9
|
export type AVLTreeMultiMapOptions<K> = AVLTreeOptions<K> & {}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { AVLTree, AVLTreeNode } from '../../../data-structures';
|
|
2
2
|
import { BSTOptions } from './bst';
|
|
3
|
+
import { Comparable } from "../../utils";
|
|
3
4
|
|
|
4
|
-
export type AVLTreeNodeNested<K, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
export type AVLTreeNodeNested<K extends Comparable, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
6
|
|
|
6
|
-
export type AVLTreeNested<K, V, N extends AVLTreeNode<K, V, N>> = AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
export type AVLTreeNested<K extends Comparable, V, N extends AVLTreeNode<K, V, N>> = AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
8
|
|
|
8
9
|
export type AVLTreeOptions<K> = BSTOptions<K> & {};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { BinaryTree, BinaryTreeNode } from '../../../data-structures';
|
|
2
2
|
import { IterationType } from "../../common";
|
|
3
|
+
import { Comparable } from "../../utils";
|
|
3
4
|
|
|
4
|
-
export type BinaryTreeNodeNested<K, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
export type BinaryTreeNodeNested<K extends Comparable, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
6
|
|
|
6
|
-
export type BinaryTreeNested<K, V, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
export type BinaryTreeNested<K extends Comparable, V, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
8
|
|
|
8
|
-
export type BinaryTreeOptions
|
|
9
|
-
iterationType?: IterationType
|
|
10
|
-
extractor?: (key: K) => number
|
|
9
|
+
export type BinaryTreeOptions = {
|
|
10
|
+
iterationType?: IterationType
|
|
11
11
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { BST, BSTNode } from '../../../data-structures';
|
|
2
2
|
import type { BinaryTreeOptions } from './binary-tree';
|
|
3
|
-
import {
|
|
3
|
+
import { Comparator } from "../../common";
|
|
4
|
+
import { Comparable } from "../../utils";
|
|
4
5
|
|
|
5
|
-
export type BSTNodeNested<K, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
6
|
+
export type BSTNodeNested<K extends Comparable, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
6
7
|
|
|
7
|
-
export type BSTNested<K, V, N extends BSTNode<K, V, N>> = BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
8
|
+
export type BSTNested<K extends Comparable, V, N extends BSTNode<K, V, N>> = BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
8
9
|
|
|
9
|
-
export type BSTOptions<K> = BinaryTreeOptions
|
|
10
|
-
|
|
10
|
+
export type BSTOptions<K> = BinaryTreeOptions & {
|
|
11
|
+
comparator?: Comparator<K>
|
|
11
12
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { RedBlackTree, RedBlackTreeNode } from '../../../data-structures';
|
|
2
2
|
import type { BSTOptions } from "./bst";
|
|
3
|
+
import { Comparable } from "../../utils";
|
|
3
4
|
|
|
4
5
|
export type RBTNColor = 'RED' | 'BLACK';
|
|
5
6
|
|
|
6
|
-
export type RedBlackTreeNodeNested<K, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
export type RedBlackTreeNodeNested<K extends Comparable, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
8
|
|
|
8
|
-
export type RedBlackTreeNested<K, V, N extends RedBlackTreeNode<K, V, N>> = RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
9
|
+
export type RedBlackTreeNested<K extends Comparable, V, N extends RedBlackTreeNode<K, V, N>> = RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
9
10
|
|
|
10
|
-
export type RBTreeOptions<K> =
|
|
11
|
+
export type RBTreeOptions<K> = BSTOptions<K> & {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { TreeMultiMap, TreeMultiMapNode } from '../../../data-structures';
|
|
2
2
|
import type { RBTreeOptions } from './rb-tree';
|
|
3
|
+
import { Comparable } from "../../utils";
|
|
3
4
|
|
|
4
|
-
export type TreeMultiMapNodeNested<K, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
export type TreeMultiMapNodeNested<K extends Comparable, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
6
|
|
|
6
|
-
export type TreeMultiMapNested<K, V, N extends TreeMultiMapNode<K, V, N>> = TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
export type TreeMultiMapNested<K extends Comparable, V, N extends TreeMultiMapNode<K, V, N>> = TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
8
|
|
|
8
9
|
export type TreeMultiMapOptions<K> = RBTreeOptions<K> & {}
|
package/src/types/utils/utils.ts
CHANGED
|
@@ -5,4 +5,17 @@ export type TrlAsyncFn = (...args: any[]) => any;
|
|
|
5
5
|
|
|
6
6
|
export type SpecifyOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
7
7
|
|
|
8
|
-
export type Any = string | number |
|
|
8
|
+
export type Any = string | number | bigint | boolean | symbol | undefined | object;
|
|
9
|
+
|
|
10
|
+
export type Comparable =
|
|
11
|
+
| number
|
|
12
|
+
| string
|
|
13
|
+
| bigint
|
|
14
|
+
| boolean
|
|
15
|
+
| ({ [key in string]: any } & {
|
|
16
|
+
valueOf(): Comparable;
|
|
17
|
+
})
|
|
18
|
+
| ({ [key in string]: any } & {
|
|
19
|
+
toString(): Comparable;
|
|
20
|
+
})
|
|
21
|
+
| (() => Comparable);
|
package/src/utils/utils.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
|
|
6
6
|
* @license MIT License
|
|
7
7
|
*/
|
|
8
|
-
import type { Thunk, ToThunkFn, TrlAsyncFn, TrlFn } from '../types';
|
|
8
|
+
import type { Comparable, Thunk, ToThunkFn, TrlAsyncFn, TrlFn } from '../types';
|
|
9
9
|
|
|
10
10
|
export const uuidV4 = function () {
|
|
11
11
|
return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function (c) {
|
|
@@ -105,3 +105,22 @@ export const roundFixed = (num: number, digit: number = 10) => {
|
|
|
105
105
|
const multiplier = Math.pow(10, digit);
|
|
106
106
|
return Math.round(num * multiplier) / multiplier;
|
|
107
107
|
};
|
|
108
|
+
|
|
109
|
+
export function isComparable(key: any): key is Comparable {
|
|
110
|
+
const keyType = typeof key;
|
|
111
|
+
if (keyType === 'number') return isNaN(key);
|
|
112
|
+
if (keyType === 'string') return true;
|
|
113
|
+
if (keyType === 'bigint') return true;
|
|
114
|
+
if (keyType === 'boolean') return true;
|
|
115
|
+
if (keyType === 'symbol') return false;
|
|
116
|
+
if (keyType === 'undefined') return false;
|
|
117
|
+
if (keyType === 'function') return isComparable(key());
|
|
118
|
+
if (keyType === 'object') {
|
|
119
|
+
if (key === null) return true;
|
|
120
|
+
if (typeof key.valueOf === 'function') return isComparable(key.valueOf());
|
|
121
|
+
if (typeof key.toString === 'function') return isComparable(key.toString());
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
@@ -3,7 +3,7 @@ import { AVLTree } from 'data-structure-typed';
|
|
|
3
3
|
describe('AVL Tree Test from data-structure-typed', () => {
|
|
4
4
|
it('should perform various operations on a AVL Tree from data-structure-typed', () => {
|
|
5
5
|
const keys = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
6
|
-
const tree = new AVLTree();
|
|
6
|
+
const tree = new AVLTree<number>();
|
|
7
7
|
|
|
8
8
|
for (const i of keys) tree.add([i, i]);
|
|
9
9
|
|
|
@@ -27,7 +27,7 @@ describe('AVL Tree Test from data-structure-typed', () => {
|
|
|
27
27
|
expect(subTreeSum).toBe(70);
|
|
28
28
|
|
|
29
29
|
let lesserSum = 0;
|
|
30
|
-
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
30
|
+
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
31
31
|
expect(lesserSum).toBe(45);
|
|
32
32
|
|
|
33
33
|
// node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
|
|
@@ -371,6 +371,76 @@
|
|
|
371
371
|
} catch (e) {
|
|
372
372
|
console.error(e);
|
|
373
373
|
}
|
|
374
|
+
|
|
375
|
+
function heapTest() {
|
|
376
|
+
const heap = new dataStructureTyped.Heap([], { comparator: (a, b) => b - a });
|
|
377
|
+
|
|
378
|
+
heap.add(10);
|
|
379
|
+
heap.add(5);
|
|
380
|
+
heap.add(15);
|
|
381
|
+
|
|
382
|
+
const max = heap.poll();
|
|
383
|
+
console.log(max); // 15
|
|
384
|
+
|
|
385
|
+
const max2 = heap.peek();
|
|
386
|
+
console.log(max2); // 15
|
|
387
|
+
|
|
388
|
+
let isEmpty = heap.isEmpty();
|
|
389
|
+
console.log(isEmpty); // false
|
|
390
|
+
|
|
391
|
+
heap.clear();
|
|
392
|
+
isEmpty = heap.isEmpty();
|
|
393
|
+
console.log(isEmpty); // true
|
|
394
|
+
|
|
395
|
+
const minNumHeap = new dataStructureTyped.MinHeap([1, 6, 2, 0, 5]);
|
|
396
|
+
minNumHeap.add(9);
|
|
397
|
+
minNumHeap.has(1) // true
|
|
398
|
+
minNumHeap.has(2) // true
|
|
399
|
+
minNumHeap.poll() // 0
|
|
400
|
+
minNumHeap.poll() // 1
|
|
401
|
+
minNumHeap.peek() // 2
|
|
402
|
+
minNumHeap.has(1); // false
|
|
403
|
+
minNumHeap.has(2); // true
|
|
404
|
+
|
|
405
|
+
const arrFromHeap = minNumHeap.toArray();
|
|
406
|
+
arrFromHeap.length // 4
|
|
407
|
+
arrFromHeap[0] // 2
|
|
408
|
+
arrFromHeap[1] // 5
|
|
409
|
+
arrFromHeap[2] // 9
|
|
410
|
+
arrFromHeap[3] // 6
|
|
411
|
+
minNumHeap.sort() // [2, 5, 6, 9]
|
|
412
|
+
|
|
413
|
+
const maxHeap = new dataStructureTyped.MaxHeap([], { comparator: (a, b) => b.keyA - a.keyA });
|
|
414
|
+
const obj1 = { keyA: 'a1' }, obj6 = { keyA: 'a6' }, obj5 = { keyA: 'a5' }, obj2 = { keyA: 'a2' },
|
|
415
|
+
obj0 = { keyA: 'a0' }, obj9 = { keyA: 'a9' };
|
|
416
|
+
|
|
417
|
+
maxHeap.add(obj1);
|
|
418
|
+
maxHeap.has(obj1) // true
|
|
419
|
+
maxHeap.has(obj9) // false
|
|
420
|
+
maxHeap.add(obj6);
|
|
421
|
+
maxHeap.has(obj6) // true
|
|
422
|
+
maxHeap.add(obj5);
|
|
423
|
+
maxHeap.add(obj2);
|
|
424
|
+
maxHeap.add(obj0);
|
|
425
|
+
maxHeap.add(obj9);
|
|
426
|
+
maxHeap.has(obj9) // true
|
|
427
|
+
|
|
428
|
+
const peek9 = maxHeap.peek();
|
|
429
|
+
console.log(peek9.keyA) // 'a9'
|
|
430
|
+
|
|
431
|
+
const heapToArr = maxHeap.toArray();
|
|
432
|
+
console.log(heapToArr.map(ele => ele?.keyA)); // ['a9', 'a2', 'a6', 'a1', 'a0', 'a5']
|
|
433
|
+
|
|
434
|
+
const values = ['a9', 'a6', 'a5', 'a2', 'a1', 'a0'];
|
|
435
|
+
let i = 0;
|
|
436
|
+
while (maxHeap.size > 0) {
|
|
437
|
+
const polled = maxHeap.poll();
|
|
438
|
+
console.log(polled.keyA) // values[i]
|
|
439
|
+
i++;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
|
|
374
444
|
</script>
|
|
375
445
|
|
|
376
446
|
</body>
|
|
@@ -6,26 +6,26 @@ const suite = new Benchmark.Suite();
|
|
|
6
6
|
const rbTree = new RedBlackTree();
|
|
7
7
|
const avlTree = new AVLTree();
|
|
8
8
|
const { TEN_THOUSAND } = magnitude;
|
|
9
|
-
const arr = getRandomIntArray(TEN_THOUSAND, 0, TEN_THOUSAND, true);
|
|
9
|
+
const arr = getRandomIntArray(TEN_THOUSAND, 0, TEN_THOUSAND - 1, true);
|
|
10
10
|
|
|
11
11
|
suite
|
|
12
|
-
.add(`${TEN_THOUSAND.toLocaleString()} RBTree add`, () => {
|
|
12
|
+
.add(`${TEN_THOUSAND.toLocaleString()} RBTree add randomly`, () => {
|
|
13
13
|
rbTree.clear();
|
|
14
14
|
for (let i = 0; i < arr.length; i++) rbTree.add(arr[i]);
|
|
15
15
|
})
|
|
16
|
+
.add(`${TEN_THOUSAND.toLocaleString()} RBTree get randomly`, () => {
|
|
17
|
+
for (let i = 0; i < arr.length; i++) rbTree.get(arr[i]);
|
|
18
|
+
})
|
|
16
19
|
.add(`${TEN_THOUSAND.toLocaleString()} RBTree add & delete randomly`, () => {
|
|
17
20
|
rbTree.clear();
|
|
18
21
|
for (let i = 0; i < arr.length; i++) rbTree.add(arr[i]);
|
|
19
22
|
for (let i = 0; i < arr.length; i++) rbTree.delete(arr[i]);
|
|
20
23
|
})
|
|
21
|
-
.add(`${TEN_THOUSAND.toLocaleString()}
|
|
22
|
-
for (let i = 0; i < arr.length; i++) rbTree.get(arr[i]);
|
|
23
|
-
})
|
|
24
|
-
.add(`${TEN_THOUSAND.toLocaleString()} AVLTree add`, () => {
|
|
24
|
+
.add(`${TEN_THOUSAND.toLocaleString()} AVLTree add randomly`, () => {
|
|
25
25
|
avlTree.clear();
|
|
26
26
|
for (let i = 0; i < arr.length; i++) avlTree.add(arr[i]);
|
|
27
27
|
})
|
|
28
|
-
.add(`${TEN_THOUSAND.toLocaleString()} AVLTree get`, () => {
|
|
28
|
+
.add(`${TEN_THOUSAND.toLocaleString()} AVLTree get randomly`, () => {
|
|
29
29
|
for (let i = 0; i < arr.length; i++) avlTree.get(arr[i]);
|
|
30
30
|
})
|
|
31
31
|
.add(`${TEN_THOUSAND.toLocaleString()} AVLTree add & delete randomly`, () => {
|
|
@@ -2,13 +2,12 @@ import * as Benchmark from 'benchmark';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as fastGlob from 'fast-glob';
|
|
5
|
-
import {
|
|
5
|
+
import { ConsoleColor, numberFix, render } from '../utils';
|
|
6
6
|
import { PerformanceTest } from './types';
|
|
7
|
-
import * as console from 'console';
|
|
8
7
|
|
|
9
8
|
const args = process.argv.slice(2);
|
|
10
9
|
|
|
11
|
-
const { GREEN, BOLD, END, YELLOW, GRAY, CYAN, BG_YELLOW } =
|
|
10
|
+
const { GREEN, BOLD, END, YELLOW, GRAY, CYAN, BG_YELLOW } = ConsoleColor;
|
|
12
11
|
|
|
13
12
|
const getRelativePath = (file: string) => {
|
|
14
13
|
return path.relative(__dirname, file);
|
|
@@ -28,7 +28,7 @@ describe('AVLTreeMultiMap count', () => {
|
|
|
28
28
|
[3, 3]
|
|
29
29
|
]);
|
|
30
30
|
tm.add([2, 2], undefined, 10);
|
|
31
|
-
tm.lesserOrGreaterTraverse(node => (node.count += 2),
|
|
31
|
+
tm.lesserOrGreaterTraverse(node => (node.count += 2), 1, 1);
|
|
32
32
|
tm.delete(2);
|
|
33
33
|
expect(tm.count).toBe(12);
|
|
34
34
|
expect(tm.getComputedCount()).toBe(16);
|
|
@@ -37,7 +37,7 @@ describe('AVLTreeMultiMap count', () => {
|
|
|
37
37
|
|
|
38
38
|
describe('AVLTreeMultiMap operations test1', () => {
|
|
39
39
|
it('should perform various operations on a Binary Search Tree with numeric values1', () => {
|
|
40
|
-
const treeMultimap = new AVLTreeMultiMap();
|
|
40
|
+
const treeMultimap = new AVLTreeMultiMap<number>();
|
|
41
41
|
|
|
42
42
|
expect(treeMultimap instanceof AVLTreeMultiMap);
|
|
43
43
|
treeMultimap.add([11, 11]);
|
|
@@ -94,7 +94,7 @@ describe('AVLTreeMultiMap operations test1', () => {
|
|
|
94
94
|
node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
95
95
|
expect(subTreeSum).toBe(31);
|
|
96
96
|
let lesserSum = 0;
|
|
97
|
-
treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key),
|
|
97
|
+
treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), -1, 10);
|
|
98
98
|
expect(lesserSum).toBe(45);
|
|
99
99
|
|
|
100
100
|
expect(node15 instanceof AVLTreeMultiMapNode);
|
|
@@ -105,7 +105,7 @@ describe('AVLTreeMultiMap operations test1', () => {
|
|
|
105
105
|
const node11 = treeMultimap.getNode(11);
|
|
106
106
|
expect(node11 instanceof AVLTreeMultiMapNode);
|
|
107
107
|
if (node11 instanceof AVLTreeMultiMapNode) {
|
|
108
|
-
const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2),
|
|
108
|
+
const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), 1, 11);
|
|
109
109
|
expect(allGreaterNodesAdded);
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -348,7 +348,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
|
|
|
348
348
|
node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
349
349
|
expect(subTreeSum).toBe(31);
|
|
350
350
|
let lesserSum = 0;
|
|
351
|
-
treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key),
|
|
351
|
+
treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), -1, 10);
|
|
352
352
|
expect(lesserSum).toBe(45);
|
|
353
353
|
|
|
354
354
|
expect(node15 instanceof AVLTreeMultiMapNode);
|
|
@@ -359,7 +359,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
|
|
|
359
359
|
const node11 = treeMultimap.getNode(11);
|
|
360
360
|
expect(node11 instanceof AVLTreeMultiMapNode);
|
|
361
361
|
if (node11 instanceof AVLTreeMultiMapNode) {
|
|
362
|
-
const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2),
|
|
362
|
+
const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), 1, 11);
|
|
363
363
|
expect(allGreaterNodesAdded);
|
|
364
364
|
}
|
|
365
365
|
|
|
@@ -564,7 +564,7 @@ describe('AVLTreeMultiMap Performance test', function () {
|
|
|
564
564
|
}
|
|
565
565
|
isDebug && console.log('---add', performance.now() - start);
|
|
566
566
|
const startL = performance.now();
|
|
567
|
-
treeMS.lesserOrGreaterTraverse(node => (node.count += 1),
|
|
567
|
+
treeMS.lesserOrGreaterTraverse(node => (node.count += 1), -1, inputSize / 2);
|
|
568
568
|
isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
|
|
569
569
|
});
|
|
570
570
|
|
|
@@ -28,7 +28,7 @@ describe('AVL Tree Test', () => {
|
|
|
28
28
|
expect(subTreeSum).toBe(70);
|
|
29
29
|
|
|
30
30
|
let lesserSum = 0;
|
|
31
|
-
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
31
|
+
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
32
32
|
expect(lesserSum).toBe(45);
|
|
33
33
|
|
|
34
34
|
// 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.
|
|
@@ -136,7 +136,7 @@ describe('AVL Tree Test recursively', () => {
|
|
|
136
136
|
expect(subTreeSum).toBe(70);
|
|
137
137
|
|
|
138
138
|
let lesserSum = 0;
|
|
139
|
-
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
139
|
+
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
140
140
|
expect(lesserSum).toBe(45);
|
|
141
141
|
|
|
142
142
|
// 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.
|
|
@@ -58,7 +58,7 @@ describe('BST operations test', () => {
|
|
|
58
58
|
expect(subTreeSum).toBe(70);
|
|
59
59
|
|
|
60
60
|
let lesserSum = 0;
|
|
61
|
-
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
61
|
+
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
62
62
|
expect(lesserSum).toBe(45);
|
|
63
63
|
|
|
64
64
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -261,7 +261,7 @@ describe('BST operations test', () => {
|
|
|
261
261
|
expect(subTreeSum).toBe(70);
|
|
262
262
|
|
|
263
263
|
let lesserSum = 0;
|
|
264
|
-
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
264
|
+
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
265
265
|
expect(lesserSum).toBe(45);
|
|
266
266
|
|
|
267
267
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -448,7 +448,7 @@ describe('BST operations test recursively', () => {
|
|
|
448
448
|
expect(subTreeSum).toBe(70);
|
|
449
449
|
|
|
450
450
|
let lesserSum = 0;
|
|
451
|
-
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
451
|
+
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
452
452
|
expect(lesserSum).toBe(45);
|
|
453
453
|
|
|
454
454
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -649,7 +649,7 @@ describe('BST operations test recursively', () => {
|
|
|
649
649
|
expect(subTreeSum).toBe(70);
|
|
650
650
|
|
|
651
651
|
let lesserSum = 0;
|
|
652
|
-
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
652
|
+
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
653
653
|
expect(lesserSum).toBe(45);
|
|
654
654
|
|
|
655
655
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -869,7 +869,7 @@ describe('BST isBST', function () {
|
|
|
869
869
|
});
|
|
870
870
|
|
|
871
871
|
test('isBST when variant is Max', () => {
|
|
872
|
-
const bst = new BST<number, number>([1, 2, 3, 9, 8, 5, 6, 7, 4], {
|
|
872
|
+
const bst = new BST<number, number>([1, 2, 3, 9, 8, 5, 6, 7, 4], { comparator: (a, b) => b - a });
|
|
873
873
|
bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
|
|
874
874
|
expect(bst.isBST()).toBe(true);
|
|
875
875
|
});
|
|
@@ -902,7 +902,7 @@ describe('BST Performance test', function () {
|
|
|
902
902
|
node => {
|
|
903
903
|
node.key - 1;
|
|
904
904
|
},
|
|
905
|
-
|
|
905
|
+
-1,
|
|
906
906
|
inputSize / 2
|
|
907
907
|
);
|
|
908
908
|
isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
|
|
@@ -2,7 +2,7 @@ import { AVLTree, BST, RedBlackTree, TreeMultiMap } from '../../../../src';
|
|
|
2
2
|
|
|
3
3
|
describe('Overall BinaryTree Test', () => {
|
|
4
4
|
it('should perform various operations on BinaryTree', () => {
|
|
5
|
-
const bst = new BST();
|
|
5
|
+
const bst = new BST<number>();
|
|
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], undefined, false);
|
|
@@ -64,16 +64,19 @@ describe('Overall BinaryTree Test', () => {
|
|
|
64
64
|
it('Should clone a BST works fine', () => {
|
|
65
65
|
const bst = new BST<number>([3, 6, 7, 1, 9], {
|
|
66
66
|
iterationType: 'RECURSIVE',
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
comparator: (a, b) => {
|
|
68
|
+
if (a > b) return -1;
|
|
69
|
+
if (a < b) return 1;
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
69
72
|
});
|
|
70
73
|
expect(bst.size).toBe(5);
|
|
71
74
|
expect(bst.root?.key).toBe(6);
|
|
72
|
-
expect(bst.root?.left?.key).toBe(
|
|
73
|
-
expect(bst.root?.left?.
|
|
74
|
-
expect(bst.root?.right?.key).toBe(
|
|
75
|
-
expect(bst.root?.right?.
|
|
76
|
-
expect(bst.getNodeByKey(
|
|
75
|
+
expect(bst.root?.left?.key).toBe(9);
|
|
76
|
+
expect(bst.root?.left?.right?.key).toBe(7);
|
|
77
|
+
expect(bst.root?.right?.key).toBe(3);
|
|
78
|
+
expect(bst.root?.right?.right?.key).toBe(1);
|
|
79
|
+
expect(bst.getNodeByKey(9)?.right?.key).toBe(7);
|
|
77
80
|
expect(bst.getHeight()).toBe(2);
|
|
78
81
|
expect(bst.has(9)).toBe(true);
|
|
79
82
|
expect(bst.has(7)).toBe(true);
|
|
@@ -82,31 +85,34 @@ describe('Overall BinaryTree Test', () => {
|
|
|
82
85
|
expect(bst.size).toBe(4);
|
|
83
86
|
expect(bst.root?.key).toBe(6);
|
|
84
87
|
expect(bst.root?.left?.key).toBe(9);
|
|
85
|
-
expect(bst.root?.right?.key).toBe(
|
|
86
|
-
expect(bst.root?.right?.
|
|
88
|
+
expect(bst.root?.right?.key).toBe(3);
|
|
89
|
+
expect(bst.root?.right?.right?.key).toBe(1);
|
|
87
90
|
expect(bst.getNodeByKey(6)?.left?.key).toBe(9);
|
|
88
91
|
expect(bst.getHeight()).toBe(2);
|
|
89
92
|
expect(bst.has(9)).toBe(true);
|
|
90
93
|
expect(bst.has(7)).toBe(false);
|
|
91
|
-
expect(bst.bfs()).toEqual([6, 9,
|
|
94
|
+
expect(bst.bfs()).toEqual([6, 9, 3, 1]);
|
|
92
95
|
const clonedBST = bst.clone();
|
|
93
96
|
expect(clonedBST.size).toBe(4);
|
|
94
97
|
expect(clonedBST.root?.key).toBe(6);
|
|
95
98
|
expect(clonedBST.root?.left?.key).toBe(9);
|
|
96
|
-
expect(clonedBST.root?.right?.key).toBe(
|
|
97
|
-
expect(clonedBST.root?.right?.
|
|
99
|
+
expect(clonedBST.root?.right?.key).toBe(3);
|
|
100
|
+
expect(clonedBST.root?.right?.right?.key).toBe(1);
|
|
98
101
|
expect(clonedBST.getNodeByKey(6)?.left?.key).toBe(9);
|
|
99
102
|
expect(clonedBST.getHeight()).toBe(2);
|
|
100
103
|
expect(clonedBST.has(9)).toBe(true);
|
|
101
104
|
expect(clonedBST.has(7)).toBe(false);
|
|
102
|
-
expect(clonedBST.bfs()).toEqual([6, 9,
|
|
105
|
+
expect(clonedBST.bfs()).toEqual([6, 9, 3, 1]);
|
|
103
106
|
});
|
|
104
107
|
|
|
105
108
|
it('Should clone a AVLTree works fine', () => {
|
|
106
109
|
const avl = new AVLTree<number>([3, 6, 7, 1, 9], {
|
|
107
110
|
iterationType: 'RECURSIVE',
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
comparator: (a, b) => {
|
|
112
|
+
if (a > b) return -1;
|
|
113
|
+
if (a < b) return 1;
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
110
116
|
});
|
|
111
117
|
expect(avl.size).toBe(5);
|
|
112
118
|
avl.add(2);
|
|
@@ -148,8 +154,7 @@ describe('Overall BinaryTree Test', () => {
|
|
|
148
154
|
|
|
149
155
|
it('Should clone a TreeMultiMap works fine', () => {
|
|
150
156
|
const tmm = new TreeMultiMap<number>([3, 6, 7, 1, 9], {
|
|
151
|
-
iterationType: 'RECURSIVE'
|
|
152
|
-
extractor: key => key
|
|
157
|
+
iterationType: 'RECURSIVE'
|
|
153
158
|
});
|
|
154
159
|
expect(tmm.size).toBe(5);
|
|
155
160
|
tmm.add(2);
|
|
@@ -197,8 +202,7 @@ describe('Overall BinaryTree Test', () => {
|
|
|
197
202
|
|
|
198
203
|
it('Should clone a RedBlackTree works fine', () => {
|
|
199
204
|
const rbTree = new RedBlackTree<number>([3, 6, 7, 1, 9], {
|
|
200
|
-
iterationType: 'RECURSIVE'
|
|
201
|
-
extractor: key => key
|
|
205
|
+
iterationType: 'RECURSIVE'
|
|
202
206
|
});
|
|
203
207
|
expect(rbTree.size).toBe(5);
|
|
204
208
|
rbTree.add(2);
|