data-structure-typed 1.39.5 → 1.39.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +6 -6
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +13 -13
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +7 -7
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +17 -17
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +6 -6
- package/dist/cjs/data-structures/binary-tree/bst.js +13 -13
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +2 -2
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +4 -4
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/segment-tree.d.ts +7 -7
- package/dist/cjs/data-structures/binary-tree/segment-tree.js +16 -16
- package/dist/cjs/data-structures/binary-tree/segment-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multiset.d.ts +6 -6
- package/dist/cjs/data-structures/binary-tree/tree-multiset.js +18 -18
- package/dist/cjs/data-structures/binary-tree/tree-multiset.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +17 -17
- package/dist/cjs/data-structures/graph/abstract-graph.js +24 -24
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.d.ts +12 -12
- package/dist/cjs/data-structures/graph/directed-graph.js +15 -15
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.d.ts +9 -9
- package/dist/cjs/data-structures/graph/map-graph.js +13 -13
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.d.ts +11 -11
- package/dist/cjs/data-structures/graph/undirected-graph.js +14 -14
- package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-table.d.ts +4 -4
- package/dist/cjs/data-structures/hash/hash-table.js +8 -8
- package/dist/cjs/data-structures/hash/hash-table.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +31 -31
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +54 -54
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +24 -24
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +52 -52
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.js +1 -1
- package/dist/cjs/data-structures/queue/queue.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
- package/dist/cjs/interfaces/graph.d.ts +2 -2
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +6 -6
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +13 -13
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +7 -7
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +18 -18
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +6 -6
- package/dist/mjs/data-structures/binary-tree/bst.js +13 -13
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +2 -2
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +4 -4
- package/dist/mjs/data-structures/binary-tree/segment-tree.d.ts +7 -7
- package/dist/mjs/data-structures/binary-tree/segment-tree.js +16 -16
- package/dist/mjs/data-structures/binary-tree/tree-multiset.d.ts +6 -6
- package/dist/mjs/data-structures/binary-tree/tree-multiset.js +18 -18
- package/dist/mjs/data-structures/graph/abstract-graph.d.ts +17 -17
- package/dist/mjs/data-structures/graph/abstract-graph.js +26 -26
- package/dist/mjs/data-structures/graph/directed-graph.d.ts +12 -12
- package/dist/mjs/data-structures/graph/directed-graph.js +15 -15
- package/dist/mjs/data-structures/graph/map-graph.d.ts +9 -9
- package/dist/mjs/data-structures/graph/map-graph.js +13 -13
- package/dist/mjs/data-structures/graph/undirected-graph.d.ts +11 -11
- package/dist/mjs/data-structures/graph/undirected-graph.js +14 -14
- package/dist/mjs/data-structures/hash/hash-table.d.ts +4 -4
- package/dist/mjs/data-structures/hash/hash-table.js +9 -9
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +31 -31
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +55 -55
- package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +24 -24
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js +53 -53
- package/dist/mjs/data-structures/queue/queue.js +1 -1
- package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
- package/dist/mjs/interfaces/graph.d.ts +2 -2
- package/dist/umd/data-structure-typed.min.js +1 -1
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +5 -5
- package/src/data-structures/binary-tree/avl-tree.ts +13 -13
- package/src/data-structures/binary-tree/binary-tree.ts +18 -18
- package/src/data-structures/binary-tree/bst.ts +16 -16
- package/src/data-structures/binary-tree/rb-tree.ts +6 -6
- package/src/data-structures/binary-tree/segment-tree.ts +15 -15
- package/src/data-structures/binary-tree/tree-multiset.ts +18 -18
- package/src/data-structures/graph/abstract-graph.ts +34 -34
- package/src/data-structures/graph/directed-graph.ts +16 -16
- package/src/data-structures/graph/map-graph.ts +13 -13
- package/src/data-structures/graph/undirected-graph.ts +15 -15
- package/src/data-structures/hash/hash-table.ts +9 -9
- package/src/data-structures/linked-list/doubly-linked-list.ts +61 -61
- package/src/data-structures/linked-list/singly-linked-list.ts +58 -58
- package/src/data-structures/queue/queue.ts +1 -1
- package/src/interfaces/binary-tree.ts +2 -2
- package/src/interfaces/graph.ts +2 -2
- package/test/integration/bst.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/binary-index-tree.test.ts +3 -3
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +8 -8
- package/test/unit/data-structures/binary-tree/bst.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +3 -3
- package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +2 -2
- package/test/unit/data-structures/graph/abstract-graph.test.ts +99 -2
- package/test/unit/data-structures/graph/directed-graph.test.ts +22 -12
- package/test/unit/data-structures/graph/undirected-graph.test.ts +8 -0
- package/test/unit/data-structures/hash/hash-table.test.ts +1 -1
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +30 -30
- package/test/unit/data-structures/linked-list/linked-list.test.ts +1 -1
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +15 -15
- package/test/utils/big-o.ts +7 -7
|
@@ -2,12 +2,12 @@ import { BTNKey, RBColor, RBTreeNodeNested, RBTreeOptions } from '../../types';
|
|
|
2
2
|
import { IBinaryTree } from '../../interfaces';
|
|
3
3
|
import { BST, BSTNode } from './bst';
|
|
4
4
|
export declare class RBTreeNode<V = any, N extends RBTreeNode<V, N> = RBTreeNodeNested<V>> extends BSTNode<V, N> {
|
|
5
|
-
constructor(key: BTNKey,
|
|
5
|
+
constructor(key: BTNKey, value?: V);
|
|
6
6
|
private _color;
|
|
7
7
|
get color(): RBColor;
|
|
8
8
|
set color(value: RBColor);
|
|
9
9
|
}
|
|
10
10
|
export declare class RBTree<V, N extends RBTreeNode<V, N> = RBTreeNode<V, RBTreeNodeNested<V>>> extends BST<V, N> implements IBinaryTree<V, N> {
|
|
11
11
|
constructor(options?: RBTreeOptions);
|
|
12
|
-
createNode(key: BTNKey,
|
|
12
|
+
createNode(key: BTNKey, value?: V): N;
|
|
13
13
|
}
|
|
@@ -4,8 +4,8 @@ exports.RBTree = exports.RBTreeNode = void 0;
|
|
|
4
4
|
const types_1 = require("../../types");
|
|
5
5
|
const bst_1 = require("./bst");
|
|
6
6
|
class RBTreeNode extends bst_1.BSTNode {
|
|
7
|
-
constructor(key,
|
|
8
|
-
super(key,
|
|
7
|
+
constructor(key, value) {
|
|
8
|
+
super(key, value);
|
|
9
9
|
this._color = types_1.RBColor.RED;
|
|
10
10
|
}
|
|
11
11
|
get color() {
|
|
@@ -20,8 +20,8 @@ class RBTree extends bst_1.BST {
|
|
|
20
20
|
constructor(options) {
|
|
21
21
|
super(options);
|
|
22
22
|
}
|
|
23
|
-
createNode(key,
|
|
24
|
-
return new RBTreeNode(key,
|
|
23
|
+
createNode(key, value) {
|
|
24
|
+
return new RBTreeNode(key, value);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
exports.RBTree = RBTree;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rb-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/rb-tree.ts"],"names":[],"mappings":";;;AAAA,uCAA6E;AAE7E,+BAAmC;AAEnC,MAAa,UAAsE,SAAQ,aAAa;IACtG,YAAY,GAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"rb-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/rb-tree.ts"],"names":[],"mappings":";;;AAAA,uCAA6E;AAE7E,+BAAmC;AAEnC,MAAa,UAAsE,SAAQ,aAAa;IACtG,YAAY,GAAW,EAAE,KAAS;QAChC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,eAAO,CAAC,GAAG,CAAC;IAC5B,CAAC;IAID,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;CACF;AAfD,gCAeC;AAED,MAAa,MACX,SAAQ,SAAS;IAGjB,YAAY,OAAuB;QACjC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAEQ,UAAU,CAAC,GAAW,EAAE,KAAS;QACxC,OAAO,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,CAAM,CAAC;IACzC,CAAC;CA8UF;AAxVD,wBAwVC"}
|
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { SegmentTreeNodeVal } from '../../types';
|
|
9
9
|
export declare class SegmentTreeNode {
|
|
10
|
-
constructor(start: number, end: number, sum: number,
|
|
10
|
+
constructor(start: number, end: number, sum: number, value?: SegmentTreeNodeVal | null);
|
|
11
11
|
private _start;
|
|
12
12
|
get start(): number;
|
|
13
13
|
set start(v: number);
|
|
14
14
|
private _end;
|
|
15
15
|
get end(): number;
|
|
16
16
|
set end(v: number);
|
|
17
|
-
private
|
|
18
|
-
get
|
|
19
|
-
set
|
|
17
|
+
private _value;
|
|
18
|
+
get value(): SegmentTreeNodeVal | null;
|
|
19
|
+
set value(v: SegmentTreeNodeVal | null);
|
|
20
20
|
private _sum;
|
|
21
21
|
get sum(): number;
|
|
22
22
|
set sum(v: number);
|
|
@@ -62,12 +62,12 @@ export declare class SegmentTree {
|
|
|
62
62
|
* updated.
|
|
63
63
|
* @param {number} sum - The `sum` parameter represents the new value that should be assigned to the `sum` property of
|
|
64
64
|
* the `SegmentTreeNode` at the specified `index`.
|
|
65
|
-
* @param {SegmentTreeNodeVal} [
|
|
65
|
+
* @param {SegmentTreeNodeVal} [value] - The `value` parameter is an optional value that can be assigned to the `value`
|
|
66
66
|
* property of the `SegmentTreeNode` object. It is not currently used in the code, but you can uncomment the line `//
|
|
67
|
-
* cur.
|
|
67
|
+
* cur.value = value;` and pass a value for `value` in the
|
|
68
68
|
* @returns The function does not return anything.
|
|
69
69
|
*/
|
|
70
|
-
updateNode(index: number, sum: number,
|
|
70
|
+
updateNode(index: number, sum: number, value?: SegmentTreeNodeVal): void;
|
|
71
71
|
/**
|
|
72
72
|
* The function `querySumByRange` calculates the sum of values within a given range in a segment tree.
|
|
73
73
|
* @param {number} indexA - The starting index of the range for which you want to calculate the sum.
|
|
@@ -9,17 +9,17 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.SegmentTree = exports.SegmentTreeNode = void 0;
|
|
11
11
|
class SegmentTreeNode {
|
|
12
|
-
constructor(start, end, sum,
|
|
12
|
+
constructor(start, end, sum, value) {
|
|
13
13
|
this._start = 0;
|
|
14
14
|
this._end = 0;
|
|
15
|
-
this.
|
|
15
|
+
this._value = null;
|
|
16
16
|
this._sum = 0;
|
|
17
17
|
this._left = null;
|
|
18
18
|
this._right = null;
|
|
19
19
|
this._start = start;
|
|
20
20
|
this._end = end;
|
|
21
21
|
this._sum = sum;
|
|
22
|
-
this.
|
|
22
|
+
this._value = value || null;
|
|
23
23
|
}
|
|
24
24
|
get start() {
|
|
25
25
|
return this._start;
|
|
@@ -33,11 +33,11 @@ class SegmentTreeNode {
|
|
|
33
33
|
set end(v) {
|
|
34
34
|
this._end = v;
|
|
35
35
|
}
|
|
36
|
-
get
|
|
37
|
-
return this.
|
|
36
|
+
get value() {
|
|
37
|
+
return this._value;
|
|
38
38
|
}
|
|
39
|
-
set
|
|
40
|
-
this.
|
|
39
|
+
set value(v) {
|
|
40
|
+
this._value = v;
|
|
41
41
|
}
|
|
42
42
|
get sum() {
|
|
43
43
|
return this._sum;
|
|
@@ -126,39 +126,39 @@ class SegmentTree {
|
|
|
126
126
|
* updated.
|
|
127
127
|
* @param {number} sum - The `sum` parameter represents the new value that should be assigned to the `sum` property of
|
|
128
128
|
* the `SegmentTreeNode` at the specified `index`.
|
|
129
|
-
* @param {SegmentTreeNodeVal} [
|
|
129
|
+
* @param {SegmentTreeNodeVal} [value] - The `value` parameter is an optional value that can be assigned to the `value`
|
|
130
130
|
* property of the `SegmentTreeNode` object. It is not currently used in the code, but you can uncomment the line `//
|
|
131
|
-
* cur.
|
|
131
|
+
* cur.value = value;` and pass a value for `value` in the
|
|
132
132
|
* @returns The function does not return anything.
|
|
133
133
|
*/
|
|
134
|
-
updateNode(index, sum,
|
|
134
|
+
updateNode(index, sum, value) {
|
|
135
135
|
const root = this.root || null;
|
|
136
136
|
if (!root) {
|
|
137
137
|
return;
|
|
138
138
|
}
|
|
139
|
-
const dfs = (cur, index, sum,
|
|
139
|
+
const dfs = (cur, index, sum, value) => {
|
|
140
140
|
if (cur.start === cur.end && cur.start === index) {
|
|
141
141
|
cur.sum = sum;
|
|
142
|
-
if (
|
|
143
|
-
cur.
|
|
142
|
+
if (value !== undefined)
|
|
143
|
+
cur.value = value;
|
|
144
144
|
return;
|
|
145
145
|
}
|
|
146
146
|
const mid = cur.start + Math.floor((cur.end - cur.start) / 2);
|
|
147
147
|
if (index <= mid) {
|
|
148
148
|
if (cur.left) {
|
|
149
|
-
dfs(cur.left, index, sum,
|
|
149
|
+
dfs(cur.left, index, sum, value);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
else {
|
|
153
153
|
if (cur.right) {
|
|
154
|
-
dfs(cur.right, index, sum,
|
|
154
|
+
dfs(cur.right, index, sum, value);
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
if (cur.left && cur.right) {
|
|
158
158
|
cur.sum = cur.left.sum + cur.right.sum;
|
|
159
159
|
}
|
|
160
160
|
};
|
|
161
|
-
dfs(root, index, sum,
|
|
161
|
+
dfs(root, index, sum, value);
|
|
162
162
|
}
|
|
163
163
|
/**
|
|
164
164
|
* The function `querySumByRange` calculates the sum of values within a given range in a segment tree.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/segment-tree.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAIH,MAAa,eAAe;IAC1B,YAAY,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"segment-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/segment-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,13 +15,13 @@ export declare class TreeMultisetNode<V = any, N extends TreeMultisetNode<V, N>
|
|
|
15
15
|
* The constructor function initializes a BinaryTreeNode object with a key, value, and count.
|
|
16
16
|
* @param {BTNKey} key - The `key` parameter is of type `BTNKey` and represents the unique identifier
|
|
17
17
|
* of the binary tree node.
|
|
18
|
-
* @param {V} [
|
|
18
|
+
* @param {V} [value] - The `value` parameter is an optional parameter of type `V`. It represents the value of the binary
|
|
19
19
|
* tree node. If no value is provided, it will be `undefined`.
|
|
20
20
|
* @param {number} [count=1] - The `count` parameter is a number that represents the number of times a particular value
|
|
21
21
|
* occurs in a binary tree node. It has a default value of 1, which means that if no value is provided for the `count`
|
|
22
22
|
* parameter when creating a new instance of the `BinaryTreeNode` class.
|
|
23
23
|
*/
|
|
24
|
-
constructor(key: BTNKey,
|
|
24
|
+
constructor(key: BTNKey, value?: V, count?: number);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* The only distinction between a TreeMultiset and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
|
|
@@ -40,26 +40,26 @@ export declare class TreeMultiset<V = any, N extends TreeMultisetNode<V, N> = Tr
|
|
|
40
40
|
* The function creates a new BSTNode with the given key, value, and count.
|
|
41
41
|
* @param {BTNKey} key - The key parameter is the unique identifier for the binary tree node. It is used to
|
|
42
42
|
* distinguish one node from another in the tree.
|
|
43
|
-
* @param {N}
|
|
43
|
+
* @param {N} value - The `value` parameter represents the value that will be stored in the binary search tree node.
|
|
44
44
|
* @param {number} [count] - The "count" parameter is an optional parameter of type number. It represents the number of
|
|
45
45
|
* occurrences of the value in the binary search tree node. If not provided, the count will default to 1.
|
|
46
46
|
* @returns A new instance of the BSTNode class with the specified key, value, and count (if provided).
|
|
47
47
|
*/
|
|
48
|
-
createNode(key: BTNKey,
|
|
48
|
+
createNode(key: BTNKey, value?: V, count?: number): N;
|
|
49
49
|
/**
|
|
50
50
|
* The `add` function adds a new node to a binary search tree, updating the count if the key already
|
|
51
51
|
* exists, and balancing the tree if necessary.
|
|
52
52
|
* @param {BTNKey | N | null} keyOrNode - The `keyOrNode` parameter can be either a
|
|
53
53
|
* `BTNKey` (which represents the key of the node to be added), a `N` (which represents a
|
|
54
54
|
* node to be added), or `null` (which represents a null node).
|
|
55
|
-
* @param [
|
|
55
|
+
* @param [value] - The `value` parameter represents the value associated with the key that is being
|
|
56
56
|
* added to the binary tree.
|
|
57
57
|
* @param [count=1] - The `count` parameter represents the number of occurrences of the key/value
|
|
58
58
|
* pair that will be added to the binary tree. It has a default value of 1, which means that if no
|
|
59
59
|
* count is specified, the default count will be 1.
|
|
60
60
|
* @returns The function `add` returns a value of type `N | null | undefined`.
|
|
61
61
|
*/
|
|
62
|
-
add(keyOrNode: BTNKey | N | null,
|
|
62
|
+
add(keyOrNode: BTNKey | N | null, value?: V, count?: number): N | null | undefined;
|
|
63
63
|
/**
|
|
64
64
|
* The function adds a new node to a binary tree if there is an available slot in the parent node.
|
|
65
65
|
* @param {N | null} newNode - The `newNode` parameter represents the node that needs to be added to
|
|
@@ -8,14 +8,14 @@ class TreeMultisetNode extends avl_tree_1.AVLTreeNode {
|
|
|
8
8
|
* The constructor function initializes a BinaryTreeNode object with a key, value, and count.
|
|
9
9
|
* @param {BTNKey} key - The `key` parameter is of type `BTNKey` and represents the unique identifier
|
|
10
10
|
* of the binary tree node.
|
|
11
|
-
* @param {V} [
|
|
11
|
+
* @param {V} [value] - The `value` parameter is an optional parameter of type `V`. It represents the value of the binary
|
|
12
12
|
* tree node. If no value is provided, it will be `undefined`.
|
|
13
13
|
* @param {number} [count=1] - The `count` parameter is a number that represents the number of times a particular value
|
|
14
14
|
* occurs in a binary tree node. It has a default value of 1, which means that if no value is provided for the `count`
|
|
15
15
|
* parameter when creating a new instance of the `BinaryTreeNode` class.
|
|
16
16
|
*/
|
|
17
|
-
constructor(key,
|
|
18
|
-
super(key,
|
|
17
|
+
constructor(key, value, count = 1) {
|
|
18
|
+
super(key, value);
|
|
19
19
|
this.count = count;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -41,13 +41,13 @@ class TreeMultiset extends avl_tree_1.AVLTree {
|
|
|
41
41
|
* The function creates a new BSTNode with the given key, value, and count.
|
|
42
42
|
* @param {BTNKey} key - The key parameter is the unique identifier for the binary tree node. It is used to
|
|
43
43
|
* distinguish one node from another in the tree.
|
|
44
|
-
* @param {N}
|
|
44
|
+
* @param {N} value - The `value` parameter represents the value that will be stored in the binary search tree node.
|
|
45
45
|
* @param {number} [count] - The "count" parameter is an optional parameter of type number. It represents the number of
|
|
46
46
|
* occurrences of the value in the binary search tree node. If not provided, the count will default to 1.
|
|
47
47
|
* @returns A new instance of the BSTNode class with the specified key, value, and count (if provided).
|
|
48
48
|
*/
|
|
49
|
-
createNode(key,
|
|
50
|
-
return new TreeMultisetNode(key,
|
|
49
|
+
createNode(key, value, count) {
|
|
50
|
+
return new TreeMultisetNode(key, value, count);
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
53
|
* The `add` function adds a new node to a binary search tree, updating the count if the key already
|
|
@@ -55,23 +55,23 @@ class TreeMultiset extends avl_tree_1.AVLTree {
|
|
|
55
55
|
* @param {BTNKey | N | null} keyOrNode - The `keyOrNode` parameter can be either a
|
|
56
56
|
* `BTNKey` (which represents the key of the node to be added), a `N` (which represents a
|
|
57
57
|
* node to be added), or `null` (which represents a null node).
|
|
58
|
-
* @param [
|
|
58
|
+
* @param [value] - The `value` parameter represents the value associated with the key that is being
|
|
59
59
|
* added to the binary tree.
|
|
60
60
|
* @param [count=1] - The `count` parameter represents the number of occurrences of the key/value
|
|
61
61
|
* pair that will be added to the binary tree. It has a default value of 1, which means that if no
|
|
62
62
|
* count is specified, the default count will be 1.
|
|
63
63
|
* @returns The function `add` returns a value of type `N | null | undefined`.
|
|
64
64
|
*/
|
|
65
|
-
add(keyOrNode,
|
|
65
|
+
add(keyOrNode, value, count = 1) {
|
|
66
66
|
let inserted = undefined, newNode;
|
|
67
67
|
if (keyOrNode instanceof TreeMultisetNode) {
|
|
68
|
-
newNode = this.createNode(keyOrNode.key, keyOrNode.
|
|
68
|
+
newNode = this.createNode(keyOrNode.key, keyOrNode.value, keyOrNode.count);
|
|
69
69
|
}
|
|
70
70
|
else if (keyOrNode === null) {
|
|
71
71
|
newNode = null;
|
|
72
72
|
}
|
|
73
73
|
else {
|
|
74
|
-
newNode = this.createNode(keyOrNode,
|
|
74
|
+
newNode = this.createNode(keyOrNode, value, count);
|
|
75
75
|
}
|
|
76
76
|
if (!this.root) {
|
|
77
77
|
this._setRoot(newNode);
|
|
@@ -86,7 +86,7 @@ class TreeMultiset extends avl_tree_1.AVLTree {
|
|
|
86
86
|
if (cur) {
|
|
87
87
|
if (newNode) {
|
|
88
88
|
if (this._compare(cur.key, newNode.key) === types_1.CP.eq) {
|
|
89
|
-
cur.
|
|
89
|
+
cur.value = newNode.value;
|
|
90
90
|
cur.count += newNode.count;
|
|
91
91
|
this._setCount(this.count + newNode.count);
|
|
92
92
|
traversing = false;
|
|
@@ -187,7 +187,7 @@ class TreeMultiset extends avl_tree_1.AVLTree {
|
|
|
187
187
|
for (let i = 0; i < keysOrNodes.length; i++) {
|
|
188
188
|
const keyOrNode = keysOrNodes[i];
|
|
189
189
|
if (keyOrNode instanceof TreeMultisetNode) {
|
|
190
|
-
inserted.push(this.add(keyOrNode.key, keyOrNode.
|
|
190
|
+
inserted.push(this.add(keyOrNode.key, keyOrNode.value, keyOrNode.count));
|
|
191
191
|
continue;
|
|
192
192
|
}
|
|
193
193
|
if (keyOrNode === null) {
|
|
@@ -217,7 +217,7 @@ class TreeMultiset extends avl_tree_1.AVLTree {
|
|
|
217
217
|
return;
|
|
218
218
|
const m = l + Math.floor((r - l) / 2);
|
|
219
219
|
const midNode = sorted[m];
|
|
220
|
-
this.add(midNode.key, midNode.
|
|
220
|
+
this.add(midNode.key, midNode.value, midNode.count);
|
|
221
221
|
buildBalanceBST(l, m - 1);
|
|
222
222
|
buildBalanceBST(m + 1, r);
|
|
223
223
|
};
|
|
@@ -233,7 +233,7 @@ class TreeMultiset extends avl_tree_1.AVLTree {
|
|
|
233
233
|
if (l <= r) {
|
|
234
234
|
const m = l + Math.floor((r - l) / 2);
|
|
235
235
|
const midNode = sorted[m];
|
|
236
|
-
this.add(midNode.key, midNode.
|
|
236
|
+
this.add(midNode.key, midNode.value, midNode.count);
|
|
237
237
|
stack.push([m + 1, r]);
|
|
238
238
|
stack.push([l, m - 1]);
|
|
239
239
|
}
|
|
@@ -329,16 +329,16 @@ class TreeMultiset extends avl_tree_1.AVLTree {
|
|
|
329
329
|
* @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
|
|
330
330
|
*/
|
|
331
331
|
_swap(srcNode, destNode) {
|
|
332
|
-
const { key,
|
|
333
|
-
const tempNode = this.createNode(key,
|
|
332
|
+
const { key, value, count, height } = destNode;
|
|
333
|
+
const tempNode = this.createNode(key, value, count);
|
|
334
334
|
if (tempNode) {
|
|
335
335
|
tempNode.height = height;
|
|
336
336
|
destNode.key = srcNode.key;
|
|
337
|
-
destNode.
|
|
337
|
+
destNode.value = srcNode.value;
|
|
338
338
|
destNode.count = srcNode.count;
|
|
339
339
|
destNode.height = srcNode.height;
|
|
340
340
|
srcNode.key = tempNode.key;
|
|
341
|
-
srcNode.
|
|
341
|
+
srcNode.value = tempNode.value;
|
|
342
342
|
srcNode.count = tempNode.count;
|
|
343
343
|
srcNode.height = tempNode.height;
|
|
344
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-multiset.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/tree-multiset.ts"],"names":[],"mappings":";;;AAQA,uCAAoG;AAEpG,yCAAgD;AAEhD,MAAa,gBAGX,SAAQ,sBAAiB;IAGzB;;;;;;;;;OASG;IACH,YAAY,GAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"tree-multiset.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/tree-multiset.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,31 +5,31 @@ export declare abstract class AbstractVertex<V = any> {
|
|
|
5
5
|
* The function is a protected constructor that takes an key and an optional value as parameters.
|
|
6
6
|
* @param {VertexKey} key - The `key` parameter is of type `VertexKey` and represents the identifier of the vertex. It is
|
|
7
7
|
* used to uniquely identify the vertex object.
|
|
8
|
-
* @param {V} [
|
|
8
|
+
* @param {V} [value] - The parameter "value" is an optional parameter of type V. It is used to assign a value to the
|
|
9
9
|
* vertex. If no value is provided, it will be set to undefined.
|
|
10
10
|
*/
|
|
11
|
-
protected constructor(key: VertexKey,
|
|
11
|
+
protected constructor(key: VertexKey, value?: V);
|
|
12
12
|
private _key;
|
|
13
13
|
get key(): VertexKey;
|
|
14
14
|
set key(v: VertexKey);
|
|
15
|
-
private
|
|
16
|
-
get
|
|
17
|
-
set
|
|
15
|
+
private _value;
|
|
16
|
+
get value(): V | undefined;
|
|
17
|
+
set value(value: V | undefined);
|
|
18
18
|
}
|
|
19
|
-
export declare abstract class AbstractEdge<
|
|
19
|
+
export declare abstract class AbstractEdge<E = any> {
|
|
20
20
|
/**
|
|
21
21
|
* The above function is a protected constructor that initializes the weight, value, and hash code properties of an
|
|
22
22
|
* object.
|
|
23
23
|
* @param {number} [weight] - The `weight` parameter is an optional number that represents the weight of the object. If
|
|
24
24
|
* a value is provided, it will be assigned to the `_weight` property. If no value is provided, the default value of 1
|
|
25
25
|
* will be assigned.
|
|
26
|
-
* @param {VO} [
|
|
26
|
+
* @param {VO} [value] - The `value` parameter is of type `VO`, which means it can be any type. It is an optional parameter,
|
|
27
27
|
* meaning it can be omitted when creating an instance of the class.
|
|
28
28
|
*/
|
|
29
|
-
protected constructor(weight?: number,
|
|
30
|
-
private
|
|
31
|
-
get
|
|
32
|
-
set
|
|
29
|
+
protected constructor(weight?: number, value?: E);
|
|
30
|
+
private _value;
|
|
31
|
+
get value(): E | undefined;
|
|
32
|
+
set value(value: E | undefined);
|
|
33
33
|
private _weight;
|
|
34
34
|
get weight(): number;
|
|
35
35
|
set weight(v: number);
|
|
@@ -53,18 +53,18 @@ export declare abstract class AbstractGraph<V = any, E = any, VO extends Abstrac
|
|
|
53
53
|
* In TypeScript, a subclass inherits the interface implementation of its parent class, without needing to implement the same interface again in the subclass. This behavior differs from Java's approach. In Java, if a parent class implements an interface, the subclass needs to explicitly implement the same interface, even if the parent class has already implemented it.
|
|
54
54
|
* This means that using abstract methods in the parent class cannot constrain the grandchild classes. Defining methods within an interface also cannot constrain the descendant classes. When inheriting from this class, developers need to be aware that this method needs to be overridden.
|
|
55
55
|
* @param key
|
|
56
|
-
* @param
|
|
56
|
+
* @param value
|
|
57
57
|
*/
|
|
58
|
-
abstract createVertex(key: VertexKey,
|
|
58
|
+
abstract createVertex(key: VertexKey, value?: V): VO;
|
|
59
59
|
/**
|
|
60
60
|
* In TypeScript, a subclass inherits the interface implementation of its parent class, without needing to implement the same interface again in the subclass. This behavior differs from Java's approach. In Java, if a parent class implements an interface, the subclass needs to explicitly implement the same interface, even if the parent class has already implemented it.
|
|
61
61
|
* This means that using abstract methods in the parent class cannot constrain the grandchild classes. Defining methods within an interface also cannot constrain the descendant classes. When inheriting from this class, developers need to be aware that this method needs to be overridden.
|
|
62
62
|
* @param srcOrV1
|
|
63
63
|
* @param destOrV2
|
|
64
64
|
* @param weight
|
|
65
|
-
* @param
|
|
65
|
+
* @param value
|
|
66
66
|
*/
|
|
67
|
-
abstract createEdge(srcOrV1: VertexKey
|
|
67
|
+
abstract createEdge(srcOrV1: VertexKey, destOrV2: VertexKey, weight?: number, value?: E): EO;
|
|
68
68
|
abstract deleteEdge(edge: EO): EO | null;
|
|
69
69
|
abstract getEdge(srcOrKey: VO | VertexKey, destOrKey: VO | VertexKey): EO | null;
|
|
70
70
|
abstract degreeOf(vertexOrKey: VO | VertexKey): number;
|
|
@@ -88,7 +88,7 @@ export declare abstract class AbstractGraph<V = any, E = any, VO extends Abstrac
|
|
|
88
88
|
*/
|
|
89
89
|
hasVertex(vertexOrKey: VO | VertexKey): boolean;
|
|
90
90
|
addVertex(vertex: VO): boolean;
|
|
91
|
-
addVertex(key: VertexKey,
|
|
91
|
+
addVertex(key: VertexKey, value?: V): boolean;
|
|
92
92
|
/**
|
|
93
93
|
* The `deleteVertex` function removes a vertex from a graph by its ID or by the vertex object itself.
|
|
94
94
|
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
@@ -114,7 +114,7 @@ export declare abstract class AbstractGraph<V = any, E = any, VO extends Abstrac
|
|
|
114
114
|
*/
|
|
115
115
|
hasEdge(v1: VertexKey | VO, v2: VertexKey | VO): boolean;
|
|
116
116
|
addEdge(edge: EO): boolean;
|
|
117
|
-
addEdge(src: VO | VertexKey, dest: VO | VertexKey, weight?: number,
|
|
117
|
+
addEdge(src: VO | VertexKey, dest: VO | VertexKey, weight?: number, value?: E): boolean;
|
|
118
118
|
/**
|
|
119
119
|
* The function sets the weight of an edge between two vertices in a graph.
|
|
120
120
|
* @param {VertexKey | VO} srcOrKey - The `srcOrKey` parameter can be either a `VertexKey` or a `VO` object. It represents
|
|
@@ -16,12 +16,12 @@ class AbstractVertex {
|
|
|
16
16
|
* The function is a protected constructor that takes an key and an optional value as parameters.
|
|
17
17
|
* @param {VertexKey} key - The `key` parameter is of type `VertexKey` and represents the identifier of the vertex. It is
|
|
18
18
|
* used to uniquely identify the vertex object.
|
|
19
|
-
* @param {V} [
|
|
19
|
+
* @param {V} [value] - The parameter "value" is an optional parameter of type V. It is used to assign a value to the
|
|
20
20
|
* vertex. If no value is provided, it will be set to undefined.
|
|
21
21
|
*/
|
|
22
|
-
constructor(key,
|
|
22
|
+
constructor(key, value) {
|
|
23
23
|
this._key = key;
|
|
24
|
-
this.
|
|
24
|
+
this._value = value;
|
|
25
25
|
}
|
|
26
26
|
get key() {
|
|
27
27
|
return this._key;
|
|
@@ -29,11 +29,11 @@ class AbstractVertex {
|
|
|
29
29
|
set key(v) {
|
|
30
30
|
this._key = v;
|
|
31
31
|
}
|
|
32
|
-
get
|
|
33
|
-
return this.
|
|
32
|
+
get value() {
|
|
33
|
+
return this._value;
|
|
34
34
|
}
|
|
35
|
-
set
|
|
36
|
-
this.
|
|
35
|
+
set value(value) {
|
|
36
|
+
this._value = value;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
exports.AbstractVertex = AbstractVertex;
|
|
@@ -44,19 +44,19 @@ class AbstractEdge {
|
|
|
44
44
|
* @param {number} [weight] - The `weight` parameter is an optional number that represents the weight of the object. If
|
|
45
45
|
* a value is provided, it will be assigned to the `_weight` property. If no value is provided, the default value of 1
|
|
46
46
|
* will be assigned.
|
|
47
|
-
* @param {VO} [
|
|
47
|
+
* @param {VO} [value] - The `value` parameter is of type `VO`, which means it can be any type. It is an optional parameter,
|
|
48
48
|
* meaning it can be omitted when creating an instance of the class.
|
|
49
49
|
*/
|
|
50
|
-
constructor(weight,
|
|
50
|
+
constructor(weight, value) {
|
|
51
51
|
this._weight = weight !== undefined ? weight : 1;
|
|
52
|
-
this.
|
|
52
|
+
this._value = value;
|
|
53
53
|
this._hashCode = (0, utils_1.uuidV4)();
|
|
54
54
|
}
|
|
55
|
-
get
|
|
56
|
-
return this.
|
|
55
|
+
get value() {
|
|
56
|
+
return this._value;
|
|
57
57
|
}
|
|
58
|
-
set
|
|
59
|
-
this.
|
|
58
|
+
set value(value) {
|
|
59
|
+
this._value = value;
|
|
60
60
|
}
|
|
61
61
|
get weight() {
|
|
62
62
|
return this._weight;
|
|
@@ -107,12 +107,12 @@ class AbstractGraph {
|
|
|
107
107
|
hasVertex(vertexOrKey) {
|
|
108
108
|
return this._vertices.has(this._getVertexKey(vertexOrKey));
|
|
109
109
|
}
|
|
110
|
-
addVertex(keyOrVertex,
|
|
110
|
+
addVertex(keyOrVertex, value) {
|
|
111
111
|
if (keyOrVertex instanceof AbstractVertex) {
|
|
112
112
|
return this._addVertexOnly(keyOrVertex);
|
|
113
113
|
}
|
|
114
114
|
else {
|
|
115
|
-
const newVertex = this.createVertex(keyOrVertex,
|
|
115
|
+
const newVertex = this.createVertex(keyOrVertex, value);
|
|
116
116
|
return this._addVertexOnly(newVertex);
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -152,7 +152,7 @@ class AbstractGraph {
|
|
|
152
152
|
const edge = this.getEdge(v1, v2);
|
|
153
153
|
return !!edge;
|
|
154
154
|
}
|
|
155
|
-
addEdge(srcOrEdge, dest, weight,
|
|
155
|
+
addEdge(srcOrEdge, dest, weight, value) {
|
|
156
156
|
if (srcOrEdge instanceof AbstractEdge) {
|
|
157
157
|
return this._addEdgeOnly(srcOrEdge);
|
|
158
158
|
}
|
|
@@ -164,7 +164,7 @@ class AbstractGraph {
|
|
|
164
164
|
srcOrEdge = srcOrEdge.key;
|
|
165
165
|
if (dest instanceof AbstractVertex)
|
|
166
166
|
dest = dest.key;
|
|
167
|
-
const newEdge = this.createEdge(srcOrEdge, dest, weight,
|
|
167
|
+
const newEdge = this.createEdge(srcOrEdge, dest, weight, value);
|
|
168
168
|
return this._addEdgeOnly(newEdge);
|
|
169
169
|
}
|
|
170
170
|
else {
|
|
@@ -406,10 +406,10 @@ class AbstractGraph {
|
|
|
406
406
|
const getMinOfNoSeen = () => {
|
|
407
407
|
let min = Infinity;
|
|
408
408
|
let minV = null;
|
|
409
|
-
for (const [key,
|
|
409
|
+
for (const [key, value] of distMap) {
|
|
410
410
|
if (!seen.has(key)) {
|
|
411
|
-
if (
|
|
412
|
-
min =
|
|
411
|
+
if (value < min) {
|
|
412
|
+
min = value;
|
|
413
413
|
minV = key;
|
|
414
414
|
}
|
|
415
415
|
}
|
|
@@ -530,7 +530,7 @@ class AbstractGraph {
|
|
|
530
530
|
distMap.set(vertexOrKey, Infinity);
|
|
531
531
|
}
|
|
532
532
|
const heap = new priority_queue_1.PriorityQueue({ comparator: (a, b) => a.key - b.key });
|
|
533
|
-
heap.add({ key: 0,
|
|
533
|
+
heap.add({ key: 0, value: srcVertex });
|
|
534
534
|
distMap.set(srcVertex, 0);
|
|
535
535
|
preMap.set(srcVertex, null);
|
|
536
536
|
/**
|
|
@@ -558,7 +558,7 @@ class AbstractGraph {
|
|
|
558
558
|
while (heap.size > 0) {
|
|
559
559
|
const curHeapNode = heap.poll();
|
|
560
560
|
const dist = curHeapNode === null || curHeapNode === void 0 ? void 0 : curHeapNode.key;
|
|
561
|
-
const cur = curHeapNode === null || curHeapNode === void 0 ? void 0 : curHeapNode.
|
|
561
|
+
const cur = curHeapNode === null || curHeapNode === void 0 ? void 0 : curHeapNode.value;
|
|
562
562
|
if (dist !== undefined) {
|
|
563
563
|
if (cur) {
|
|
564
564
|
seen.add(cur);
|
|
@@ -579,7 +579,7 @@ class AbstractGraph {
|
|
|
579
579
|
const distSrcToNeighbor = distMap.get(neighbor);
|
|
580
580
|
if (distSrcToNeighbor) {
|
|
581
581
|
if (dist + weight < distSrcToNeighbor) {
|
|
582
|
-
heap.add({ key: dist + weight,
|
|
582
|
+
heap.add({ key: dist + weight, value: neighbor });
|
|
583
583
|
preMap.set(neighbor, cur);
|
|
584
584
|
distMap.set(neighbor, dist + weight);
|
|
585
585
|
}
|