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.
Files changed (92) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +13 -13
  3. package/benchmark/report.html +37 -1
  4. package/benchmark/report.json +405 -3
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -10
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.js +12 -14
  10. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +7 -13
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.js +46 -78
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/bst.d.ts +51 -96
  15. package/dist/cjs/data-structures/binary-tree/bst.js +120 -218
  16. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +3 -4
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.js +4 -2
  19. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
  21. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +1 -0
  22. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  23. package/dist/cjs/data-structures/heap/heap.d.ts +1 -3
  24. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  25. package/dist/cjs/interfaces/binary-tree.d.ts +3 -3
  26. package/dist/cjs/types/common.d.ts +1 -1
  27. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
  28. package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
  29. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
  30. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +6 -5
  31. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  32. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
  33. package/dist/cjs/types/utils/utils.d.ts +10 -1
  34. package/dist/cjs/utils/utils.d.ts +2 -1
  35. package/dist/cjs/utils/utils.js +29 -1
  36. package/dist/cjs/utils/utils.js.map +1 -1
  37. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
  38. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -10
  39. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
  40. package/dist/mjs/data-structures/binary-tree/avl-tree.js +12 -14
  41. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +7 -13
  42. package/dist/mjs/data-structures/binary-tree/binary-tree.js +45 -77
  43. package/dist/mjs/data-structures/binary-tree/bst.d.ts +51 -96
  44. package/dist/mjs/data-structures/binary-tree/bst.js +122 -221
  45. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +3 -4
  46. package/dist/mjs/data-structures/binary-tree/rb-tree.js +4 -2
  47. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
  48. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +1 -0
  49. package/dist/mjs/data-structures/heap/heap.d.ts +1 -3
  50. package/dist/mjs/interfaces/binary-tree.d.ts +3 -3
  51. package/dist/mjs/types/common.d.ts +1 -1
  52. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
  53. package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
  54. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
  55. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +6 -5
  56. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  57. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
  58. package/dist/mjs/types/utils/utils.d.ts +10 -1
  59. package/dist/mjs/utils/utils.d.ts +2 -1
  60. package/dist/mjs/utils/utils.js +27 -0
  61. package/dist/umd/data-structure-typed.js +206 -301
  62. package/dist/umd/data-structure-typed.min.js +4 -4
  63. package/dist/umd/data-structure-typed.min.js.map +1 -1
  64. package/package.json +6 -6
  65. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +5 -12
  66. package/src/data-structures/binary-tree/avl-tree.ts +15 -15
  67. package/src/data-structures/binary-tree/binary-tree.ts +56 -76
  68. package/src/data-structures/binary-tree/bst.ts +132 -224
  69. package/src/data-structures/binary-tree/rb-tree.ts +9 -6
  70. package/src/data-structures/binary-tree/tree-multi-map.ts +5 -3
  71. package/src/data-structures/heap/heap.ts +1 -1
  72. package/src/interfaces/binary-tree.ts +4 -3
  73. package/src/types/common.ts +1 -1
  74. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +3 -2
  75. package/src/types/data-structures/binary-tree/avl-tree.ts +3 -2
  76. package/src/types/data-structures/binary-tree/binary-tree.ts +5 -5
  77. package/src/types/data-structures/binary-tree/bst.ts +6 -5
  78. package/src/types/data-structures/binary-tree/rb-tree.ts +4 -3
  79. package/src/types/data-structures/binary-tree/tree-multi-map.ts +3 -2
  80. package/src/types/utils/utils.ts +14 -1
  81. package/src/utils/utils.ts +20 -1
  82. package/test/integration/all-in-one.test.ts +2 -2
  83. package/test/integration/index.html +70 -0
  84. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +7 -7
  85. package/test/performance/reportor.ts +2 -3
  86. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +7 -7
  87. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
  88. package/test/unit/data-structures/binary-tree/bst.test.ts +6 -6
  89. package/test/unit/data-structures/binary-tree/overall.test.ts +24 -20
  90. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +6 -6
  91. package/test/unit/utils/utils.test.ts +5 -0
  92. 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<K> = {
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 { BSTVariant } from "../../common";
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<K> & {
10
- variant?: BSTVariant
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> = Omit<BSTOptions<K>, 'variant'> & {};
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> & {}
@@ -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 | boolean | object | null | undefined | symbol;
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);
@@ -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), 'LT', 10);
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()} RBTree get`, () => {
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 { Color, numberFix, render } from '../utils';
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 } = Color;
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), 'GT', 1);
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), 'LT', 10);
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), 'GT', 11);
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), 'LT', 10);
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), 'GT', 11);
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), 'LT', inputSize / 2);
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), 'LT', 10);
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), 'LT', 10);
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), 'LT', 10);
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), 'LT', 10);
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), 'LT', 10);
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), 'LT', 10);
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], { variant: 'INVERSE' });
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
- 'LT',
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
- variant: 'INVERSE',
68
- extractor: key => key
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(7);
73
- expect(bst.root?.left?.left?.key).toBe(9);
74
- expect(bst.root?.right?.key).toBe(1);
75
- expect(bst.root?.right?.left?.key).toBe(3);
76
- expect(bst.getNodeByKey(7)?.left?.key).toBe(9);
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(1);
86
- expect(bst.root?.right?.left?.key).toBe(3);
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, 1, 3]);
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(1);
97
- expect(clonedBST.root?.right?.left?.key).toBe(3);
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, 1, 3]);
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
- variant: 'INVERSE',
109
- extractor: key => key
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);