undirected-graph-typed 1.49.0 → 1.49.1

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 (82) hide show
  1. package/dist/data-structures/binary-tree/avl-tree.d.ts +10 -12
  2. package/dist/data-structures/binary-tree/avl-tree.js +3 -4
  3. package/dist/data-structures/binary-tree/binary-tree.d.ts +58 -58
  4. package/dist/data-structures/binary-tree/binary-tree.js +6 -6
  5. package/dist/data-structures/binary-tree/bst.d.ts +15 -15
  6. package/dist/data-structures/binary-tree/bst.js +3 -3
  7. package/dist/data-structures/binary-tree/rb-tree.d.ts +11 -11
  8. package/dist/data-structures/binary-tree/rb-tree.js +5 -6
  9. package/dist/data-structures/binary-tree/tree-multimap.d.ts +14 -14
  10. package/dist/data-structures/binary-tree/tree-multimap.js +3 -3
  11. package/dist/data-structures/graph/abstract-graph.d.ts +9 -3
  12. package/dist/data-structures/graph/abstract-graph.js +27 -31
  13. package/dist/data-structures/graph/directed-graph.d.ts +8 -1
  14. package/dist/data-structures/graph/directed-graph.js +1 -8
  15. package/dist/data-structures/graph/map-graph.d.ts +1 -1
  16. package/dist/data-structures/graph/undirected-graph.d.ts +8 -1
  17. package/dist/data-structures/graph/undirected-graph.js +1 -8
  18. package/dist/data-structures/hash/hash-map.d.ts +14 -2
  19. package/dist/data-structures/hash/hash-map.js +19 -8
  20. package/dist/data-structures/hash/hash-table.d.ts +2 -2
  21. package/dist/data-structures/heap/heap.d.ts +14 -3
  22. package/dist/data-structures/heap/heap.js +12 -0
  23. package/dist/data-structures/heap/max-heap.d.ts +11 -1
  24. package/dist/data-structures/heap/max-heap.js +10 -7
  25. package/dist/data-structures/heap/min-heap.d.ts +11 -1
  26. package/dist/data-structures/heap/min-heap.js +10 -7
  27. package/dist/data-structures/linked-list/doubly-linked-list.d.ts +8 -2
  28. package/dist/data-structures/linked-list/doubly-linked-list.js +6 -7
  29. package/dist/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  30. package/dist/data-structures/linked-list/singly-linked-list.js +0 -7
  31. package/dist/data-structures/priority-queue/max-priority-queue.d.ts +1 -1
  32. package/dist/data-structures/priority-queue/max-priority-queue.js +0 -7
  33. package/dist/data-structures/priority-queue/min-priority-queue.d.ts +1 -1
  34. package/dist/data-structures/priority-queue/min-priority-queue.js +0 -7
  35. package/dist/data-structures/priority-queue/priority-queue.d.ts +9 -1
  36. package/dist/data-structures/priority-queue/priority-queue.js +8 -7
  37. package/dist/data-structures/queue/deque.d.ts +6 -5
  38. package/dist/data-structures/queue/deque.js +6 -12
  39. package/dist/data-structures/queue/queue.d.ts +18 -3
  40. package/dist/data-structures/queue/queue.js +16 -6
  41. package/dist/data-structures/stack/stack.d.ts +15 -5
  42. package/dist/data-structures/stack/stack.js +7 -4
  43. package/dist/data-structures/trie/trie.d.ts +13 -3
  44. package/dist/data-structures/trie/trie.js +11 -8
  45. package/dist/interfaces/binary-tree.d.ts +4 -4
  46. package/dist/types/common.d.ts +32 -8
  47. package/dist/types/common.js +22 -1
  48. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +1 -24
  49. package/dist/types/data-structures/binary-tree/binary-tree.js +0 -22
  50. package/dist/types/data-structures/binary-tree/rb-tree.d.ts +1 -1
  51. package/dist/types/data-structures/binary-tree/tree-multimap.d.ts +1 -1
  52. package/package.json +2 -2
  53. package/src/data-structures/binary-tree/avl-tree.ts +14 -14
  54. package/src/data-structures/binary-tree/binary-tree.ts +74 -77
  55. package/src/data-structures/binary-tree/bst.ts +18 -17
  56. package/src/data-structures/binary-tree/rb-tree.ts +17 -18
  57. package/src/data-structures/binary-tree/tree-multimap.ts +22 -20
  58. package/src/data-structures/graph/abstract-graph.ts +35 -25
  59. package/src/data-structures/graph/directed-graph.ts +2 -2
  60. package/src/data-structures/graph/map-graph.ts +1 -1
  61. package/src/data-structures/graph/undirected-graph.ts +2 -2
  62. package/src/data-structures/hash/hash-map.ts +20 -3
  63. package/src/data-structures/hash/hash-table.ts +3 -3
  64. package/src/data-structures/heap/heap.ts +14 -3
  65. package/src/data-structures/heap/max-heap.ts +11 -2
  66. package/src/data-structures/heap/min-heap.ts +11 -2
  67. package/src/data-structures/linked-list/doubly-linked-list.ts +9 -3
  68. package/src/data-structures/linked-list/singly-linked-list.ts +3 -3
  69. package/src/data-structures/priority-queue/max-priority-queue.ts +1 -1
  70. package/src/data-structures/priority-queue/min-priority-queue.ts +1 -1
  71. package/src/data-structures/priority-queue/priority-queue.ts +9 -2
  72. package/src/data-structures/queue/deque.ts +7 -9
  73. package/src/data-structures/queue/queue.ts +18 -3
  74. package/src/data-structures/stack/stack.ts +16 -6
  75. package/src/data-structures/trie/trie.ts +13 -4
  76. package/src/interfaces/binary-tree.ts +5 -5
  77. package/src/types/common.ts +37 -12
  78. package/src/types/data-structures/binary-tree/avl-tree.ts +0 -1
  79. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -26
  80. package/src/types/data-structures/binary-tree/bst.ts +0 -1
  81. package/src/types/data-structures/binary-tree/rb-tree.ts +1 -1
  82. package/src/types/data-structures/binary-tree/tree-multimap.ts +1 -1
@@ -58,7 +58,7 @@ class BST extends binary_tree_1.BinaryTree {
58
58
  /**
59
59
  * This is the constructor function for a binary search tree class in TypeScript, which initializes
60
60
  * the tree with optional elements and options.
61
- * @param [elements] - An optional iterable of BTNodeExemplar objects that will be added to the
61
+ * @param [elements] - An optional iterable of BTNExemplar objects that will be added to the
62
62
  * binary search tree.
63
63
  * @param [options] - The `options` parameter is an optional object that can contain additional
64
64
  * configuration options for the binary search tree. It can have the following properties:
@@ -105,7 +105,7 @@ class BST extends binary_tree_1.BinaryTree {
105
105
  }
106
106
  /**
107
107
  * The function checks if an exemplar is an instance of BSTNode.
108
- * @param exemplar - The `exemplar` parameter is a variable of type `BTNodeExemplar<K, V, N>`.
108
+ * @param exemplar - The `exemplar` parameter is a variable of type `BTNExemplar<K, V, N>`.
109
109
  * @returns a boolean value indicating whether the exemplar is an instance of the BSTNode class.
110
110
  */
111
111
  isNode(exemplar) {
@@ -114,7 +114,7 @@ class BST extends binary_tree_1.BinaryTree {
114
114
  /**
115
115
  * The function `exemplarToNode` takes an exemplar and returns a node if the exemplar is valid,
116
116
  * otherwise it returns undefined.
117
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`, where:
117
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`, where:
118
118
  * @param {V} [value] - The `value` parameter is an optional value that can be passed to the
119
119
  * `exemplarToNode` function. It represents the value associated with the exemplar node.
120
120
  * @returns a node of type N or undefined.
@@ -5,7 +5,7 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import { BiTreeDeleteResult, BTNCallback, BTNodeExemplar, BTNodeKeyOrNode, IterationType, RBTNColor, RBTreeOptions, RedBlackTreeNested, RedBlackTreeNodeNested } from '../../types';
8
+ import { BinaryTreeDeleteResult, BTNCallback, BTNExemplar, BTNKeyOrNode, IterationType, RBTNColor, RBTreeOptions, RedBlackTreeNested, RedBlackTreeNodeNested } from '../../types';
9
9
  import { BST, BSTNode } from './bst';
10
10
  import { IBinaryTree } from '../../interfaces';
11
11
  export declare class RedBlackTreeNode<K = any, V = any, N extends RedBlackTreeNode<K, V, N> = RedBlackTreeNodeNested<K, V>> extends BSTNode<K, V, N> {
@@ -24,7 +24,7 @@ export declare class RedBlackTree<K = any, V = any, N extends RedBlackTreeNode<K
24
24
  /**
25
25
  * This is the constructor function for a Red-Black Tree data structure in TypeScript, which
26
26
  * initializes the tree with optional elements and options.
27
- * @param [elements] - The `elements` parameter is an optional iterable of `BTNodeExemplar<K, V, N>`
27
+ * @param [elements] - The `elements` parameter is an optional iterable of `BTNExemplar<K, V, N>`
28
28
  * objects. It represents the initial elements that will be added to the RBTree during its
29
29
  * construction. If this parameter is provided, the `addMany` method is called to add all the
30
30
  * elements to the
@@ -32,7 +32,7 @@ export declare class RedBlackTree<K = any, V = any, N extends RedBlackTreeNode<K
32
32
  * behavior of the RBTree. It is of type `Partial<RBTreeOptions>`, which means that you can provide
33
33
  * only a subset of the properties defined in the `RBTreeOptions` interface.
34
34
  */
35
- constructor(elements?: Iterable<BTNodeExemplar<K, V, N>>, options?: Partial<RBTreeOptions<K>>);
35
+ constructor(elements?: Iterable<BTNExemplar<K, V, N>>, options?: Partial<RBTreeOptions<K>>);
36
36
  protected _root: N;
37
37
  get root(): N;
38
38
  protected _size: number;
@@ -60,27 +60,27 @@ export declare class RedBlackTree<K = any, V = any, N extends RedBlackTreeNode<K
60
60
  createTree(options?: RBTreeOptions<K>): TREE;
61
61
  /**
62
62
  * The function checks if an exemplar is an instance of the RedBlackTreeNode class.
63
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`.
63
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`.
64
64
  * @returns a boolean value indicating whether the exemplar is an instance of the RedBlackTreeNode
65
65
  * class.
66
66
  */
67
- isNode(exemplar: BTNodeExemplar<K, V, N>): exemplar is N;
67
+ isNode(exemplar: BTNExemplar<K, V, N>): exemplar is N;
68
68
  /**
69
69
  * The function "isNotNodeInstance" checks if a potential key is a K.
70
70
  * @param {any} potentialKey - The potentialKey parameter is of type any, which means it can be any
71
71
  * data type.
72
72
  * @returns a boolean value indicating whether the potentialKey is of type number or not.
73
73
  */
74
- isNotNodeInstance(potentialKey: BTNodeKeyOrNode<K, N>): potentialKey is K;
74
+ isNotNodeInstance(potentialKey: BTNKeyOrNode<K, N>): potentialKey is K;
75
75
  /**
76
76
  * The function `exemplarToNode` takes an exemplar and converts it into a node object if possible.
77
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`, where:
77
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`, where:
78
78
  * @param {V} [value] - The `value` parameter is an optional value that can be passed to the
79
79
  * `exemplarToNode` function. It represents the value associated with the exemplar node. If a value
80
80
  * is provided, it will be used when creating the new node. If no value is provided, the new node
81
81
  * @returns a node of type N or undefined.
82
82
  */
83
- exemplarToNode(exemplar: BTNodeExemplar<K, V, N>, value?: V): N | undefined;
83
+ exemplarToNode(exemplar: BTNExemplar<K, V, N>, value?: V): N | undefined;
84
84
  /**
85
85
  * Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
86
86
  * Space Complexity: O(1)
@@ -97,7 +97,7 @@ export declare class RedBlackTree<K = any, V = any, N extends RedBlackTreeNode<K
97
97
  * being added to the binary search tree.
98
98
  * @returns The method `add` returns either the newly added node (`N`) or `undefined`.
99
99
  */
100
- add(keyOrNodeOrEntry: BTNodeExemplar<K, V, N>, value?: V): N | undefined;
100
+ add(keyOrNodeOrEntry: BTNExemplar<K, V, N>, value?: V): N | undefined;
101
101
  /**
102
102
  * Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
103
103
  * Space Complexity: O(1)
@@ -115,9 +115,9 @@ export declare class RedBlackTree<K = any, V = any, N extends RedBlackTreeNode<K
115
115
  * @param {C} callback - The `callback` parameter is a function that takes a node of type `N` and
116
116
  * returns a value of type `ReturnType<C>`. It is used to determine if a node should be deleted based
117
117
  * on its identifier. The `callback` function is optional and defaults to `this._defaultOneParam
118
- * @returns an array of `BiTreeDeleteResult<N>`.
118
+ * @returns an array of `BinaryTreeDeleteResult<N>`.
119
119
  */
120
- delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null | undefined, callback?: C): BiTreeDeleteResult<N>[];
120
+ delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null | undefined, callback?: C): BinaryTreeDeleteResult<N>[];
121
121
  /**
122
122
  * Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
123
123
  * Space Complexity: O(1)
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.RedBlackTree = exports.RedBlackTreeNode = void 0;
11
11
  const types_1 = require("../../types");
12
12
  const bst_1 = require("./bst");
13
- const binary_tree_1 = require("./binary-tree");
14
13
  class RedBlackTreeNode extends bst_1.BSTNode {
15
14
  constructor(key, value, color = types_1.RBTNColor.BLACK) {
16
15
  super(key, value);
@@ -29,7 +28,7 @@ class RedBlackTree extends bst_1.BST {
29
28
  /**
30
29
  * This is the constructor function for a Red-Black Tree data structure in TypeScript, which
31
30
  * initializes the tree with optional elements and options.
32
- * @param [elements] - The `elements` parameter is an optional iterable of `BTNodeExemplar<K, V, N>`
31
+ * @param [elements] - The `elements` parameter is an optional iterable of `BTNExemplar<K, V, N>`
33
32
  * objects. It represents the initial elements that will be added to the RBTree during its
34
33
  * construction. If this parameter is provided, the `addMany` method is called to add all the
35
34
  * elements to the
@@ -78,7 +77,7 @@ class RedBlackTree extends bst_1.BST {
78
77
  }
79
78
  /**
80
79
  * The function checks if an exemplar is an instance of the RedBlackTreeNode class.
81
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`.
80
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`.
82
81
  * @returns a boolean value indicating whether the exemplar is an instance of the RedBlackTreeNode
83
82
  * class.
84
83
  */
@@ -96,7 +95,7 @@ class RedBlackTree extends bst_1.BST {
96
95
  }
97
96
  /**
98
97
  * The function `exemplarToNode` takes an exemplar and converts it into a node object if possible.
99
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`, where:
98
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`, where:
100
99
  * @param {V} [value] - The `value` parameter is an optional value that can be passed to the
101
100
  * `exemplarToNode` function. It represents the value associated with the exemplar node. If a value
102
101
  * is provided, it will be used when creating the new node. If no value is provided, the new node
@@ -207,7 +206,7 @@ class RedBlackTree extends bst_1.BST {
207
206
  * @param {C} callback - The `callback` parameter is a function that takes a node of type `N` and
208
207
  * returns a value of type `ReturnType<C>`. It is used to determine if a node should be deleted based
209
208
  * on its identifier. The `callback` function is optional and defaults to `this._defaultOneParam
210
- * @returns an array of `BiTreeDeleteResult<N>`.
209
+ * @returns an array of `BinaryTreeDeleteResult<N>`.
211
210
  */
212
211
  delete(identifier, callback = this._defaultOneParamCallback) {
213
212
  const ans = [];
@@ -303,7 +302,7 @@ class RedBlackTree extends bst_1.BST {
303
302
  */
304
303
  getNode(identifier, callback = this._defaultOneParamCallback, beginRoot = this.root, iterationType = this.iterationType) {
305
304
  var _a;
306
- if (identifier instanceof binary_tree_1.BinaryTreeNode)
305
+ if (identifier instanceof RedBlackTreeNode)
307
306
  callback = (node => node);
308
307
  beginRoot = this.ensureNode(beginRoot);
309
308
  return (_a = this.getNodes(identifier, callback, true, beginRoot, iterationType)[0]) !== null && _a !== void 0 ? _a : undefined;
@@ -5,8 +5,8 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { BSTNodeKeyOrNode, BTNodeExemplar, TreeMultimapNodeNested, TreeMultimapOptions } from '../../types';
9
- import { BiTreeDeleteResult, BTNCallback, BTNodeKeyOrNode, IterationType, TreeMultimapNested } from '../../types';
8
+ import type { BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, BTNExemplar, BTNKeyOrNode, TreeMultimapNested, TreeMultimapNodeNested, TreeMultimapOptions } from '../../types';
9
+ import { IterationType } from '../../types';
10
10
  import { IBinaryTree } from '../../interfaces';
11
11
  import { AVLTree, AVLTreeNode } from './avl-tree';
12
12
  export declare class TreeMultimapNode<K = any, V = any, N extends TreeMultimapNode<K, V, N> = TreeMultimapNodeNested<K, V>> extends AVLTreeNode<K, V, N> {
@@ -27,7 +27,7 @@ export declare class TreeMultimapNode<K = any, V = any, N extends TreeMultimapNo
27
27
  * The only distinction between a TreeMultimap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
28
28
  */
29
29
  export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N> = TreeMultimapNode<K, V, TreeMultimapNodeNested<K, V>>, TREE extends TreeMultimap<K, V, N, TREE> = TreeMultimap<K, V, N, TreeMultimapNested<K, V, N>>> extends AVLTree<K, V, N, TREE> implements IBinaryTree<K, V, N, TREE> {
30
- constructor(elements?: Iterable<BTNodeExemplar<K, V, N>>, options?: Partial<TreeMultimapOptions<K>>);
30
+ constructor(elements?: Iterable<BTNExemplar<K, V, N>>, options?: Partial<TreeMultimapOptions<K>>);
31
31
  private _count;
32
32
  get count(): number;
33
33
  /**
@@ -43,21 +43,21 @@ export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K
43
43
  createTree(options?: TreeMultimapOptions<K>): TREE;
44
44
  /**
45
45
  * The function checks if an exemplar is an instance of the TreeMultimapNode class.
46
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`.
46
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`.
47
47
  * @returns a boolean value indicating whether the exemplar is an instance of the TreeMultimapNode
48
48
  * class.
49
49
  */
50
- isNode(exemplar: BTNodeExemplar<K, V, N>): exemplar is N;
50
+ isNode(exemplar: BTNExemplar<K, V, N>): exemplar is N;
51
51
  /**
52
52
  * The function "isNotNodeInstance" checks if a potential key is a K.
53
53
  * @param {any} potentialKey - The potentialKey parameter is of type any, which means it can be any
54
54
  * data type.
55
55
  * @returns a boolean value indicating whether the potentialKey is of type number or not.
56
56
  */
57
- isNotNodeInstance(potentialKey: BTNodeKeyOrNode<K, N>): potentialKey is K;
57
+ isNotNodeInstance(potentialKey: BTNKeyOrNode<K, N>): potentialKey is K;
58
58
  /**
59
59
  * The function `exemplarToNode` converts an exemplar object into a node object.
60
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`, which means it
60
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`, which means it
61
61
  * can be one of the following:
62
62
  * @param {V} [value] - The `value` parameter is an optional argument that represents the value
63
63
  * associated with the node. It is of type `V`, which can be any data type. If no value is provided,
@@ -66,7 +66,7 @@ export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K
66
66
  * times the value should be added to the node. If not provided, it defaults to 1.
67
67
  * @returns a node of type `N` or `undefined`.
68
68
  */
69
- exemplarToNode(exemplar: BTNodeExemplar<K, V, N>, value?: V, count?: number): N | undefined;
69
+ exemplarToNode(exemplar: BTNExemplar<K, V, N>, value?: V, count?: number): N | undefined;
70
70
  /**
71
71
  * Time Complexity: O(log n) - logarithmic time, where "n" is the number of nodes in the tree. The add method of the superclass (AVLTree) has logarithmic time complexity.
72
72
  * Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size.
@@ -87,7 +87,7 @@ export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K
87
87
  * @returns The method is returning either the newly inserted node or `undefined` if the insertion
88
88
  * was not successful.
89
89
  */
90
- add(keyOrNodeOrEntry: BTNodeExemplar<K, V, N>, value?: V, count?: number): N | undefined;
90
+ add(keyOrNodeOrEntry: BTNExemplar<K, V, N>, value?: V, count?: number): N | undefined;
91
91
  /**
92
92
  * Time Complexity: O(k log n) - logarithmic time, where "n" is the number of nodes in the tree. The add method of the superclass (AVLTree) has logarithmic time complexity.
93
93
  * Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size.
@@ -102,7 +102,7 @@ export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K
102
102
  * either keys, nodes, or entries.
103
103
  * @returns The method is returning an array of type `N | undefined`.
104
104
  */
105
- addMany(keysOrNodesOrEntries: Iterable<BTNodeExemplar<K, V, N>>): (N | undefined)[];
105
+ addMany(keysOrNodesOrEntries: Iterable<BTNExemplar<K, V, N>>): (N | undefined)[];
106
106
  /**
107
107
  * Time Complexity: O(1) - constant time, as it performs basic pointer assignments.
108
108
  * Space Complexity: O(1) - constant space, as it only uses a constant amount of memory.
@@ -140,9 +140,9 @@ export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K
140
140
  * being deleted. If set to true, the count of the node will not be considered and the node will be
141
141
  * deleted regardless of its count. If set to false (default), the count of the node will be
142
142
  * decremented by 1 and
143
- * @returns an array of `BiTreeDeleteResult<N>`.
143
+ * @returns an array of `BinaryTreeDeleteResult<N>`.
144
144
  */
145
- delete<C extends BTNCallback<N>>(identifier: ReturnType<C>, callback?: C, ignoreCount?: boolean): BiTreeDeleteResult<N>[];
145
+ delete<C extends BTNCallback<N>>(identifier: ReturnType<C>, callback?: C, ignoreCount?: boolean): BinaryTreeDeleteResult<N>[];
146
146
  /**
147
147
  * Time Complexity: O(n log n) - logarithmic time for each insertion, where "n" is the number of nodes in the tree. This is because the method calls the add method for each node.
148
148
  * Space Complexity: O(n) - linear space, as it creates an array to store the sorted nodes.
@@ -178,7 +178,7 @@ export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K
178
178
  * @returns The method `_addTo` returns either the `parent.left` or `parent.right` node that was
179
179
  * added, or `undefined` if no node was added.
180
180
  */
181
- protected _addTo(newNode: N | undefined, parent: BSTNodeKeyOrNode<K, N>): N | undefined;
181
+ protected _addTo(newNode: N | undefined, parent: BSTNKeyOrNode<K, N>): N | undefined;
182
182
  /**
183
183
  * The `_swapProperties` function swaps the key, value, count, and height properties between two nodes.
184
184
  * @param {K | N | undefined} srcNode - The `srcNode` parameter represents the source node from
@@ -188,6 +188,6 @@ export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K
188
188
  * @returns either the `destNode` object if both `srcNode` and `destNode` are defined, or `undefined`
189
189
  * if either `srcNode` or `destNode` is undefined.
190
190
  */
191
- protected _swapProperties(srcNode: BSTNodeKeyOrNode<K, N>, destNode: BSTNodeKeyOrNode<K, N>): N | undefined;
191
+ protected _swapProperties(srcNode: BSTNKeyOrNode<K, N>, destNode: BSTNKeyOrNode<K, N>): N | undefined;
192
192
  protected _replaceNode(oldNode: N, newNode: N): N;
193
193
  }
@@ -53,7 +53,7 @@ class TreeMultimap extends avl_tree_1.AVLTree {
53
53
  }
54
54
  /**
55
55
  * The function checks if an exemplar is an instance of the TreeMultimapNode class.
56
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`.
56
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`.
57
57
  * @returns a boolean value indicating whether the exemplar is an instance of the TreeMultimapNode
58
58
  * class.
59
59
  */
@@ -71,7 +71,7 @@ class TreeMultimap extends avl_tree_1.AVLTree {
71
71
  }
72
72
  /**
73
73
  * The function `exemplarToNode` converts an exemplar object into a node object.
74
- * @param exemplar - The `exemplar` parameter is of type `BTNodeExemplar<K, V, N>`, which means it
74
+ * @param exemplar - The `exemplar` parameter is of type `BTNExemplar<K, V, N>`, which means it
75
75
  * can be one of the following:
76
76
  * @param {V} [value] - The `value` parameter is an optional argument that represents the value
77
77
  * associated with the node. It is of type `V`, which can be any data type. If no value is provided,
@@ -225,7 +225,7 @@ class TreeMultimap extends avl_tree_1.AVLTree {
225
225
  * being deleted. If set to true, the count of the node will not be considered and the node will be
226
226
  * deleted regardless of its count. If set to false (default), the count of the node will be
227
227
  * decremented by 1 and
228
- * @returns an array of `BiTreeDeleteResult<N>`.
228
+ * @returns an array of `BinaryTreeDeleteResult<N>`.
229
229
  */
230
230
  delete(identifier, callback = this._defaultOneParamCallback, ignoreCount = false) {
231
231
  var _a;
@@ -1,7 +1,13 @@
1
- import type { DijkstraResult, VertexKey } from '../../types';
2
- import { EntryCallback } from "../../types";
3
- import { IGraph } from '../../interfaces';
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Tyler Zeng
5
+ * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
+ * @license MIT License
7
+ */
8
+ import type { DijkstraResult, EntryCallback, VertexKey } from '../../types';
4
9
  import { IterableEntryBase } from "../base";
10
+ import { IGraph } from '../../interfaces';
5
11
  export declare abstract class AbstractVertex<V = any> {
6
12
  key: VertexKey;
7
13
  value: V | undefined;
@@ -1,17 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractGraph = exports.AbstractEdge = exports.AbstractVertex = void 0;
4
- /**
5
- * data-structure-typed
6
- *
7
- * @author Tyler Zeng
8
- * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
9
- * @license MIT License
10
- */
11
4
  const utils_1 = require("../../utils");
12
- const priority_queue_1 = require("../priority-queue");
13
- const queue_1 = require("../queue");
14
5
  const base_1 = require("../base");
6
+ const heap_1 = require("../heap");
7
+ const queue_1 = require("../queue");
15
8
  class AbstractVertex {
16
9
  /**
17
10
  * The function is a protected constructor that takes an key and an optional value as parameters.
@@ -440,13 +433,7 @@ class AbstractGraph extends base_1.IterableEntryBase {
440
433
  * shortest paths from the source vertex to all other vertexMap in the graph. If `genPaths
441
434
  * @returns The function `dijkstraWithoutHeap` returns an object of type `DijkstraResult<VO>`.
442
435
  */
443
- dijkstraWithoutHeap(src, dest, getMinDist, genPaths) {
444
- if (getMinDist === undefined)
445
- getMinDist = false;
446
- if (genPaths === undefined)
447
- genPaths = false;
448
- if (dest === undefined)
449
- dest = undefined;
436
+ dijkstraWithoutHeap(src, dest = undefined, getMinDist = false, genPaths = false) {
450
437
  let minDist = Infinity;
451
438
  let minDest = undefined;
452
439
  let minPath = [];
@@ -575,14 +562,8 @@ class AbstractGraph extends base_1.IterableEntryBase {
575
562
  * shortest paths from the source vertex to all other vertexMap in the graph. If `genPaths
576
563
  * @returns The function `dijkstra` returns an object of type `DijkstraResult<VO>`.
577
564
  */
578
- dijkstra(src, dest, getMinDist, genPaths) {
565
+ dijkstra(src, dest = undefined, getMinDist = false, genPaths = false) {
579
566
  var _a;
580
- if (getMinDist === undefined)
581
- getMinDist = false;
582
- if (genPaths === undefined)
583
- genPaths = false;
584
- if (dest === undefined)
585
- dest = undefined;
586
567
  let minDist = Infinity;
587
568
  let minDest = undefined;
588
569
  let minPath = [];
@@ -600,7 +581,7 @@ class AbstractGraph extends base_1.IterableEntryBase {
600
581
  if (vertexOrKey instanceof AbstractVertex)
601
582
  distMap.set(vertexOrKey, Infinity);
602
583
  }
603
- const heap = new priority_queue_1.PriorityQueue([], { comparator: (a, b) => a.key - b.key });
584
+ const heap = new heap_1.Heap([], { comparator: (a, b) => a.key - b.key });
604
585
  heap.add({ key: 0, value: srcVertex });
605
586
  distMap.set(srcVertex, 0);
606
587
  preMap.set(srcVertex, undefined);
@@ -969,13 +950,28 @@ class AbstractGraph extends base_1.IterableEntryBase {
969
950
  }
970
951
  const cycles = new Map();
971
952
  if (needCycles) {
972
- let SCCs = new Map();
973
- if (SCCs.size < 1) {
974
- SCCs = getSCCs();
975
- }
976
- SCCs.forEach((SCC, low) => {
977
- if (SCC.length > 1) {
978
- cycles.set(low, SCC);
953
+ const visitedMap = new Map();
954
+ const stack = [];
955
+ const findCyclesDFS = (cur, parent) => {
956
+ visitedMap.set(cur, true);
957
+ stack.push(cur);
958
+ const neighbors = this.getNeighbors(cur);
959
+ for (const neighbor of neighbors) {
960
+ if (!visitedMap.get(neighbor)) {
961
+ findCyclesDFS(neighbor, cur);
962
+ }
963
+ else if (stack.includes(neighbor) && neighbor !== parent) {
964
+ const cycleStartIndex = stack.indexOf(neighbor);
965
+ const cycle = stack.slice(cycleStartIndex);
966
+ const cycleLow = Math.min(...cycle.map(v => dfnMap.get(v) || Infinity));
967
+ cycles.set(cycleLow, cycle);
968
+ }
969
+ }
970
+ stack.pop();
971
+ };
972
+ vertexMap.forEach(v => {
973
+ if (!visitedMap.get(v)) {
974
+ findCyclesDFS(v, undefined);
979
975
  }
980
976
  });
981
977
  }
@@ -1,5 +1,12 @@
1
- import { AbstractEdge, AbstractGraph, AbstractVertex } from './abstract-graph';
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Tyler Zeng
5
+ * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
+ * @license MIT License
7
+ */
2
8
  import type { VertexKey } from '../../types';
9
+ import { AbstractEdge, AbstractGraph, AbstractVertex } from './abstract-graph';
3
10
  import { IGraph } from '../../interfaces';
4
11
  export declare class DirectedVertex<V = any> extends AbstractVertex<V> {
5
12
  /**
@@ -1,15 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DirectedGraph = exports.DirectedEdge = exports.DirectedVertex = void 0;
4
- /**
5
- * data-structure-typed
6
- *
7
- * @author Tyler Zeng
8
- * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
9
- * @license MIT License
10
- */
11
- const utils_1 = require("../../utils");
12
4
  const abstract_graph_1 = require("./abstract-graph");
5
+ const utils_1 = require("../../utils");
13
6
  class DirectedVertex extends abstract_graph_1.AbstractVertex {
14
7
  /**
15
8
  * The constructor function initializes a vertex with an optional value.
@@ -1,4 +1,4 @@
1
- import { MapGraphCoordinate, VertexKey } from '../../types';
1
+ import type { MapGraphCoordinate, VertexKey } from '../../types';
2
2
  import { DirectedEdge, DirectedGraph, DirectedVertex } from './directed-graph';
3
3
  export declare class MapVertex<V = any> extends DirectedVertex<V> {
4
4
  lat: number;
@@ -1,6 +1,13 @@
1
- import { AbstractEdge, AbstractGraph, AbstractVertex } from './abstract-graph';
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Tyler Zeng
5
+ * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
+ * @license MIT License
7
+ */
2
8
  import type { VertexKey } from '../../types';
3
9
  import { IGraph } from '../../interfaces';
10
+ import { AbstractEdge, AbstractGraph, AbstractVertex } from './abstract-graph';
4
11
  export declare class UndirectedVertex<V = any> extends AbstractVertex<V> {
5
12
  /**
6
13
  * The constructor function initializes a vertex with an optional value.
@@ -1,15 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UndirectedGraph = exports.UndirectedEdge = exports.UndirectedVertex = void 0;
4
- /**
5
- * data-structure-typed
6
- *
7
- * @author Tyler Zeng
8
- * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
9
- * @license MIT License
10
- */
11
- const utils_1 = require("../../utils");
12
4
  const abstract_graph_1 = require("./abstract-graph");
5
+ const utils_1 = require("../../utils");
13
6
  class UndirectedVertex extends abstract_graph_1.AbstractVertex {
14
7
  /**
15
8
  * The constructor function initializes a vertex with an optional value.
@@ -5,8 +5,14 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import { EntryCallback, HashMapLinkedNode, HashMapOptions, HashMapStoreItem } from '../../types';
9
- import { IterableEntryBase } from "../base";
8
+ import type { EntryCallback, HashMapLinkedNode, HashMapOptions, HashMapStoreItem } from '../../types';
9
+ import { IterableEntryBase } from '../base';
10
+ /**
11
+ * 1. Key-Value Pair Storage: HashMap stores key-value pairs. Each key maps to a value.
12
+ * 2. Fast Lookup: It's used when you need to quickly find, insert, or delete elements based on a key.
13
+ * 3. Unique Keys: Keys are unique. If you try to insert another entry with the same key, the old entry will be replaced by the new one.
14
+ * 4. Unordered Collection: HashMap does not guarantee the order of elements, and the order may change over time.
15
+ */
10
16
  export declare class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
11
17
  protected _store: {
12
18
  [key: string]: HashMapStoreItem<K, V>;
@@ -117,6 +123,11 @@ export declare class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
117
123
  protected _isObjKey(key: any): key is (object | ((...args: any[]) => any));
118
124
  protected _getNoObjKey(key: K): string;
119
125
  }
126
+ /**
127
+ * 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which elements are inserted. Therefore, when you traverse it, elements will be returned in the order they were inserted into the map.
128
+ * 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of elements through the linked list.
129
+ * 3. Time Complexity: Similar to HashMap, LinkedHashMap offers constant-time performance for get and put operations in most cases.
130
+ */
120
131
  export declare class LinkedHashMap<K = any, V = any> extends IterableEntryBase<K, V> {
121
132
  protected _noObjMap: Record<string, HashMapLinkedNode<K, V | undefined>>;
122
133
  protected _objMap: WeakMap<object, HashMapLinkedNode<K, V | undefined>>;
@@ -169,6 +180,7 @@ export declare class LinkedHashMap<K = any, V = any> extends IterableEntryBase<K
169
180
  */
170
181
  set(key: K, value?: V): number;
171
182
  has(key: K): boolean;
183
+ hasValue(value: V): boolean;
172
184
  setMany(entries: Iterable<[K, V]>): void;
173
185
  /**
174
186
  * Time Complexity: O(1)
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
- /**
3
- * data-structure-typed
4
- *
5
- * @author Tyler Zeng
6
- * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
7
- * @license MIT License
8
- */
9
2
  Object.defineProperty(exports, "__esModule", { value: true });
10
3
  exports.LinkedHashMap = exports.HashMap = void 0;
11
- const utils_1 = require("../../utils");
12
4
  const base_1 = require("../base");
5
+ const utils_1 = require("../../utils");
6
+ /**
7
+ * 1. Key-Value Pair Storage: HashMap stores key-value pairs. Each key maps to a value.
8
+ * 2. Fast Lookup: It's used when you need to quickly find, insert, or delete elements based on a key.
9
+ * 3. Unique Keys: Keys are unique. If you try to insert another entry with the same key, the old entry will be replaced by the new one.
10
+ * 4. Unordered Collection: HashMap does not guarantee the order of elements, and the order may change over time.
11
+ */
13
12
  class HashMap extends base_1.IterableEntryBase {
14
13
  /**
15
14
  * The constructor function initializes a new instance of a class with optional elements and options.
@@ -230,6 +229,11 @@ class HashMap extends base_1.IterableEntryBase {
230
229
  }
231
230
  }
232
231
  exports.HashMap = HashMap;
232
+ /**
233
+ * 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which elements are inserted. Therefore, when you traverse it, elements will be returned in the order they were inserted into the map.
234
+ * 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of elements through the linked list.
235
+ * 3. Time Complexity: Similar to HashMap, LinkedHashMap offers constant-time performance for get and put operations in most cases.
236
+ */
233
237
  class LinkedHashMap extends base_1.IterableEntryBase {
234
238
  constructor(elements, options = {
235
239
  hashFn: (key) => String(key),
@@ -365,6 +369,13 @@ class LinkedHashMap extends base_1.IterableEntryBase {
365
369
  return hash in this._noObjMap;
366
370
  }
367
371
  }
372
+ hasValue(value) {
373
+ for (const [, elementValue] of this) {
374
+ if (elementValue === value)
375
+ return true;
376
+ }
377
+ return false;
378
+ }
368
379
  setMany(entries) {
369
380
  for (const entry of entries) {
370
381
  const [key, value] = entry;
@@ -5,13 +5,13 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- export declare class HashTableNode<K, V> {
8
+ import type { HashFunction } from '../../types';
9
+ export declare class HashTableNode<K = any, V = any> {
9
10
  key: K;
10
11
  value: V;
11
12
  next: HashTableNode<K, V> | undefined;
12
13
  constructor(key: K, value: V);
13
14
  }
14
- import { HashFunction } from '../../types';
15
15
  export declare class HashTable<K = any, V = any> {
16
16
  protected static readonly DEFAULT_CAPACITY = 16;
17
17
  protected static readonly LOAD_FACTOR = 0.75;
@@ -4,9 +4,20 @@
4
4
  * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
5
5
  * @license MIT License
6
6
  */
7
- import type { Comparator, DFSOrderPattern, ElementCallback } from '../../types';
8
- import { HeapOptions } from "../../types";
9
- import { IterableElementBase } from "../base";
7
+ import type { Comparator, DFSOrderPattern, ElementCallback, HeapOptions } from '../../types';
8
+ import { IterableElementBase } from '../base';
9
+ /**
10
+ * 1. Complete Binary Tree: Heaps are typically complete binary trees, meaning every level is fully filled except possibly for the last level, which has nodes as far left as possible.
11
+ * 2. Heap Properties: Each node in a heap follows a specific order property, which varies depending on the type of heap:
12
+ * Max Heap: The value of each parent node is greater than or equal to the value of its children.
13
+ * Min Heap: The value of each parent node is less than or equal to the value of its children.
14
+ * 3. Root Node Access: In a heap, the largest element (in a max heap) or the smallest element (in a min heap) is always at the root of the tree.
15
+ * 4. Efficient Insertion and Deletion: Due to its structure, a heap allows for insertion and deletion operations in logarithmic time (O(log n)).
16
+ * 5. Managing Dynamic Data Sets: Heaps effectively manage dynamic data sets, especially when frequent access to the largest or smallest elements is required.
17
+ * 6. Non-linear Search: While a heap allows rapid access to its largest or smallest element, it is less efficient for other operations, such as searching for a specific element, as it is not designed for these tasks.
18
+ * 7. Efficient Sorting Algorithms: For example, heap sort. Heap sort uses the properties of a heap to sort elements.
19
+ * 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prim's minimum spanning tree algorithm, which use heaps to improve performance.
20
+ */
10
21
  export declare class Heap<E = any> extends IterableElementBase<E> {
11
22
  options: HeapOptions<E>;
12
23
  constructor(elements?: Iterable<E>, options?: HeapOptions<E>);
@@ -8,6 +8,18 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.FibonacciHeap = exports.FibonacciHeapNode = exports.Heap = void 0;
10
10
  const base_1 = require("../base");
11
+ /**
12
+ * 1. Complete Binary Tree: Heaps are typically complete binary trees, meaning every level is fully filled except possibly for the last level, which has nodes as far left as possible.
13
+ * 2. Heap Properties: Each node in a heap follows a specific order property, which varies depending on the type of heap:
14
+ * Max Heap: The value of each parent node is greater than or equal to the value of its children.
15
+ * Min Heap: The value of each parent node is less than or equal to the value of its children.
16
+ * 3. Root Node Access: In a heap, the largest element (in a max heap) or the smallest element (in a min heap) is always at the root of the tree.
17
+ * 4. Efficient Insertion and Deletion: Due to its structure, a heap allows for insertion and deletion operations in logarithmic time (O(log n)).
18
+ * 5. Managing Dynamic Data Sets: Heaps effectively manage dynamic data sets, especially when frequent access to the largest or smallest elements is required.
19
+ * 6. Non-linear Search: While a heap allows rapid access to its largest or smallest element, it is less efficient for other operations, such as searching for a specific element, as it is not designed for these tasks.
20
+ * 7. Efficient Sorting Algorithms: For example, heap sort. Heap sort uses the properties of a heap to sort elements.
21
+ * 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prim's minimum spanning tree algorithm, which use heaps to improve performance.
22
+ */
11
23
  class Heap extends base_1.IterableElementBase {
12
24
  constructor(elements, options) {
13
25
  super();