bst-typed 2.5.0 → 2.5.2
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/dist/cjs/index.cjs +1222 -57
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs +1222 -56
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs +1222 -58
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs +1222 -57
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/types/common/error.d.ts +9 -0
- package/dist/types/common/index.d.ts +1 -1
- package/dist/types/data-structures/base/index.d.ts +1 -0
- package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
- package/dist/types/data-structures/base/linear-base.d.ts +3 -3
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +288 -0
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
- package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
- package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
- package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
- package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
- package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
- package/dist/types/data-structures/heap/heap.d.ts +336 -0
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
- package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
- package/dist/types/data-structures/queue/deque.d.ts +364 -4
- package/dist/types/data-structures/queue/queue.d.ts +288 -0
- package/dist/types/data-structures/stack/stack.d.ts +240 -0
- package/dist/types/data-structures/trie/trie.d.ts +292 -4
- package/dist/types/interfaces/graph.d.ts +1 -1
- package/dist/types/types/common.d.ts +2 -2
- package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
- package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
- package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
- package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
- package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
- package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
- package/dist/types/types/utils/validate-type.d.ts +4 -4
- package/dist/umd/bst-typed.js +1220 -55
- package/dist/umd/bst-typed.js.map +1 -1
- package/dist/umd/bst-typed.min.js +3 -3
- package/dist/umd/bst-typed.min.js.map +1 -1
- package/package.json +2 -2
- package/src/common/error.ts +19 -1
- package/src/common/index.ts +1 -1
- package/src/data-structures/base/index.ts +1 -0
- package/src/data-structures/base/iterable-element-base.ts +3 -2
- package/src/data-structures/base/iterable-entry-base.ts +8 -8
- package/src/data-structures/base/linear-base.ts +3 -3
- package/src/data-structures/binary-tree/avl-tree.ts +299 -0
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +341 -5
- package/src/data-structures/binary-tree/binary-tree.ts +606 -6
- package/src/data-structures/binary-tree/bst.ts +946 -7
- package/src/data-structures/binary-tree/red-black-tree.ts +472 -0
- package/src/data-structures/binary-tree/segment-tree.ts +145 -2
- package/src/data-structures/binary-tree/tree-map.ts +3423 -499
- package/src/data-structures/binary-tree/tree-multi-map.ts +3537 -596
- package/src/data-structures/binary-tree/tree-multi-set.ts +2855 -495
- package/src/data-structures/binary-tree/tree-set.ts +3209 -413
- package/src/data-structures/graph/abstract-graph.ts +6 -6
- package/src/data-structures/graph/directed-graph.ts +240 -0
- package/src/data-structures/graph/undirected-graph.ts +216 -0
- package/src/data-structures/hash/hash-map.ts +281 -19
- package/src/data-structures/heap/heap.ts +340 -4
- package/src/data-structures/heap/max-heap.ts +2 -2
- package/src/data-structures/linked-list/doubly-linked-list.ts +411 -3
- package/src/data-structures/linked-list/singly-linked-list.ts +363 -3
- package/src/data-structures/linked-list/skip-linked-list.ts +439 -7
- package/src/data-structures/matrix/matrix.ts +202 -10
- package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
- package/src/data-structures/queue/deque.ts +365 -5
- package/src/data-structures/queue/queue.ts +288 -0
- package/src/data-structures/stack/stack.ts +240 -0
- package/src/data-structures/trie/trie.ts +295 -7
- package/src/interfaces/graph.ts +1 -1
- package/src/types/common.ts +2 -2
- package/src/types/data-structures/binary-tree/bst.ts +1 -0
- package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
- package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
- package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
- package/src/types/data-structures/heap/heap.ts +1 -0
- package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
- package/src/types/utils/validate-type.ts +4 -4
package/dist/cjs/index.cjs
CHANGED
|
@@ -59,6 +59,61 @@ function makeTrampoline(fn) {
|
|
|
59
59
|
}
|
|
60
60
|
__name(makeTrampoline, "makeTrampoline");
|
|
61
61
|
|
|
62
|
+
// src/common/error.ts
|
|
63
|
+
function raise(ErrorClass, message) {
|
|
64
|
+
throw new ErrorClass(message);
|
|
65
|
+
}
|
|
66
|
+
__name(raise, "raise");
|
|
67
|
+
var ERR = {
|
|
68
|
+
// Range / index
|
|
69
|
+
indexOutOfRange: /* @__PURE__ */ __name((index, min, max, ctx) => `${ctx ? ctx + ": " : ""}Index ${index} is out of range [${min}, ${max}].`, "indexOutOfRange"),
|
|
70
|
+
invalidIndex: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Index must be an integer.`, "invalidIndex"),
|
|
71
|
+
// Type / argument
|
|
72
|
+
invalidArgument: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidArgument"),
|
|
73
|
+
comparatorRequired: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Comparator is required for non-number/non-string/non-Date keys.`, "comparatorRequired"),
|
|
74
|
+
invalidKey: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidKey"),
|
|
75
|
+
notAFunction: /* @__PURE__ */ __name((name, ctx) => `${ctx ? ctx + ": " : ""}${name} must be a function.`, "notAFunction"),
|
|
76
|
+
invalidEntry: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Each entry must be a [key, value] tuple.`, "invalidEntry"),
|
|
77
|
+
invalidNaN: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}NaN is not a valid key.`, "invalidNaN"),
|
|
78
|
+
invalidDate: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Invalid Date key.`, "invalidDate"),
|
|
79
|
+
reduceEmpty: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Reduce of empty structure with no initial value.`, "reduceEmpty"),
|
|
80
|
+
callbackReturnType: /* @__PURE__ */ __name((expected, got, ctx) => `${ctx ? ctx + ": " : ""}Callback must return ${expected}; got ${got}.`, "callbackReturnType"),
|
|
81
|
+
// State / operation
|
|
82
|
+
invalidOperation: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidOperation"),
|
|
83
|
+
// Matrix
|
|
84
|
+
matrixDimensionMismatch: /* @__PURE__ */ __name((op) => `Matrix: Dimensions must be compatible for ${op}.`, "matrixDimensionMismatch"),
|
|
85
|
+
matrixSingular: /* @__PURE__ */ __name(() => "Matrix: Singular matrix, inverse does not exist.", "matrixSingular"),
|
|
86
|
+
matrixNotSquare: /* @__PURE__ */ __name(() => "Matrix: Must be square for inversion.", "matrixNotSquare"),
|
|
87
|
+
matrixNotRectangular: /* @__PURE__ */ __name(() => "Matrix: Must be rectangular for transposition.", "matrixNotRectangular"),
|
|
88
|
+
matrixRowMismatch: /* @__PURE__ */ __name((expected, got) => `Matrix: Expected row length ${expected}, but got ${got}.`, "matrixRowMismatch"),
|
|
89
|
+
// Order statistic
|
|
90
|
+
orderStatisticNotEnabled: /* @__PURE__ */ __name((method, ctx) => `${ctx ? ctx + ": " : ""}${method}() requires enableOrderStatistic: true.`, "orderStatisticNotEnabled")
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// src/common/index.ts
|
|
94
|
+
var DFSOperation = /* @__PURE__ */ ((DFSOperation2) => {
|
|
95
|
+
DFSOperation2[DFSOperation2["VISIT"] = 0] = "VISIT";
|
|
96
|
+
DFSOperation2[DFSOperation2["PROCESS"] = 1] = "PROCESS";
|
|
97
|
+
return DFSOperation2;
|
|
98
|
+
})(DFSOperation || {});
|
|
99
|
+
var Range = class {
|
|
100
|
+
constructor(low, high, includeLow = true, includeHigh = true) {
|
|
101
|
+
this.low = low;
|
|
102
|
+
this.high = high;
|
|
103
|
+
this.includeLow = includeLow;
|
|
104
|
+
this.includeHigh = includeHigh;
|
|
105
|
+
}
|
|
106
|
+
static {
|
|
107
|
+
__name(this, "Range");
|
|
108
|
+
}
|
|
109
|
+
// Determine whether a key is within the range
|
|
110
|
+
isInRange(key, comparator) {
|
|
111
|
+
const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
|
|
112
|
+
const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
|
|
113
|
+
return lowCheck && highCheck;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
62
117
|
// src/data-structures/base/iterable-element-base.ts
|
|
63
118
|
var IterableElementBase = class {
|
|
64
119
|
static {
|
|
@@ -77,7 +132,7 @@ var IterableElementBase = class {
|
|
|
77
132
|
if (options) {
|
|
78
133
|
const { toElementFn } = options;
|
|
79
134
|
if (typeof toElementFn === "function") this._toElementFn = toElementFn;
|
|
80
|
-
else if (toElementFn)
|
|
135
|
+
else if (toElementFn) raise(TypeError, "toElementFn must be a function type");
|
|
81
136
|
}
|
|
82
137
|
}
|
|
83
138
|
/**
|
|
@@ -240,7 +295,7 @@ var IterableElementBase = class {
|
|
|
240
295
|
acc = initialValue;
|
|
241
296
|
} else {
|
|
242
297
|
const first = iter.next();
|
|
243
|
-
if (first.done)
|
|
298
|
+
if (first.done) raise(TypeError, "Reduce of empty structure with no initial value");
|
|
244
299
|
acc = first.value;
|
|
245
300
|
index = 1;
|
|
246
301
|
}
|
|
@@ -475,55 +530,6 @@ var LinearBase = class _LinearBase extends IterableElementBase {
|
|
|
475
530
|
}
|
|
476
531
|
};
|
|
477
532
|
|
|
478
|
-
// src/common/error.ts
|
|
479
|
-
var ERR = {
|
|
480
|
-
// Range / index
|
|
481
|
-
indexOutOfRange: /* @__PURE__ */ __name((index, min, max, ctx) => `${ctx ? ctx + ": " : ""}Index ${index} is out of range [${min}, ${max}].`, "indexOutOfRange"),
|
|
482
|
-
invalidIndex: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Index must be an integer.`, "invalidIndex"),
|
|
483
|
-
// Type / argument
|
|
484
|
-
invalidArgument: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidArgument"),
|
|
485
|
-
comparatorRequired: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Comparator is required for non-number/non-string/non-Date keys.`, "comparatorRequired"),
|
|
486
|
-
invalidKey: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidKey"),
|
|
487
|
-
notAFunction: /* @__PURE__ */ __name((name, ctx) => `${ctx ? ctx + ": " : ""}${name} must be a function.`, "notAFunction"),
|
|
488
|
-
invalidEntry: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Each entry must be a [key, value] tuple.`, "invalidEntry"),
|
|
489
|
-
invalidNaN: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}NaN is not a valid key.`, "invalidNaN"),
|
|
490
|
-
invalidDate: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Invalid Date key.`, "invalidDate"),
|
|
491
|
-
reduceEmpty: /* @__PURE__ */ __name((ctx) => `${ctx ? ctx + ": " : ""}Reduce of empty structure with no initial value.`, "reduceEmpty"),
|
|
492
|
-
callbackReturnType: /* @__PURE__ */ __name((expected, got, ctx) => `${ctx ? ctx + ": " : ""}Callback must return ${expected}; got ${got}.`, "callbackReturnType"),
|
|
493
|
-
// State / operation
|
|
494
|
-
invalidOperation: /* @__PURE__ */ __name((reason, ctx) => `${ctx ? ctx + ": " : ""}${reason}`, "invalidOperation"),
|
|
495
|
-
// Matrix
|
|
496
|
-
matrixDimensionMismatch: /* @__PURE__ */ __name((op) => `Matrix: Dimensions must be compatible for ${op}.`, "matrixDimensionMismatch"),
|
|
497
|
-
matrixSingular: /* @__PURE__ */ __name(() => "Matrix: Singular matrix, inverse does not exist.", "matrixSingular"),
|
|
498
|
-
matrixNotSquare: /* @__PURE__ */ __name(() => "Matrix: Must be square for inversion.", "matrixNotSquare"),
|
|
499
|
-
matrixNotRectangular: /* @__PURE__ */ __name(() => "Matrix: Must be rectangular for transposition.", "matrixNotRectangular"),
|
|
500
|
-
matrixRowMismatch: /* @__PURE__ */ __name((expected, got) => `Matrix: Expected row length ${expected}, but got ${got}.`, "matrixRowMismatch")
|
|
501
|
-
};
|
|
502
|
-
|
|
503
|
-
// src/common/index.ts
|
|
504
|
-
var DFSOperation = /* @__PURE__ */ ((DFSOperation2) => {
|
|
505
|
-
DFSOperation2[DFSOperation2["VISIT"] = 0] = "VISIT";
|
|
506
|
-
DFSOperation2[DFSOperation2["PROCESS"] = 1] = "PROCESS";
|
|
507
|
-
return DFSOperation2;
|
|
508
|
-
})(DFSOperation || {});
|
|
509
|
-
var Range = class {
|
|
510
|
-
constructor(low, high, includeLow = true, includeHigh = true) {
|
|
511
|
-
this.low = low;
|
|
512
|
-
this.high = high;
|
|
513
|
-
this.includeLow = includeLow;
|
|
514
|
-
this.includeHigh = includeHigh;
|
|
515
|
-
}
|
|
516
|
-
static {
|
|
517
|
-
__name(this, "Range");
|
|
518
|
-
}
|
|
519
|
-
// Determine whether a key is within the range
|
|
520
|
-
isInRange(key, comparator) {
|
|
521
|
-
const lowCheck = this.includeLow ? comparator(key, this.low) >= 0 : comparator(key, this.low) > 0;
|
|
522
|
-
const highCheck = this.includeHigh ? comparator(key, this.high) <= 0 : comparator(key, this.high) < 0;
|
|
523
|
-
return lowCheck && highCheck;
|
|
524
|
-
}
|
|
525
|
-
};
|
|
526
|
-
|
|
527
533
|
// src/data-structures/base/iterable-entry-base.ts
|
|
528
534
|
var IterableEntryBase = class {
|
|
529
535
|
static {
|
|
@@ -777,6 +783,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
777
783
|
|
|
778
784
|
|
|
779
785
|
|
|
786
|
+
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
|
|
780
810
|
* @example
|
|
781
811
|
* // Track queue length
|
|
782
812
|
* const q = new Queue<number>();
|
|
@@ -803,6 +833,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
803
833
|
|
|
804
834
|
|
|
805
835
|
|
|
836
|
+
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
|
|
806
860
|
* @example
|
|
807
861
|
* // View the front element
|
|
808
862
|
* const q = new Queue<string>(['first', 'second', 'third']);
|
|
@@ -845,6 +899,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
845
899
|
|
|
846
900
|
|
|
847
901
|
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
|
|
848
926
|
* @example
|
|
849
927
|
* // Queue for...of iteration and isEmpty check
|
|
850
928
|
* const queue = new Queue<string>(['A', 'B', 'C', 'D']);
|
|
@@ -883,6 +961,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
883
961
|
|
|
884
962
|
|
|
885
963
|
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
|
|
967
|
+
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
|
|
987
|
+
|
|
886
988
|
* @example
|
|
887
989
|
* // basic Queue creation and push operation
|
|
888
990
|
* // Create a simple Queue with initial values
|
|
@@ -928,6 +1030,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
928
1030
|
|
|
929
1031
|
|
|
930
1032
|
|
|
1033
|
+
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
|
|
1042
|
+
|
|
1043
|
+
|
|
1044
|
+
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
|
|
1048
|
+
|
|
1049
|
+
|
|
1050
|
+
|
|
1051
|
+
|
|
1052
|
+
|
|
1053
|
+
|
|
1054
|
+
|
|
1055
|
+
|
|
1056
|
+
|
|
931
1057
|
* @example
|
|
932
1058
|
* // Queue shift and peek operations
|
|
933
1059
|
* const queue = new Queue<number>([10, 20, 30, 40]);
|
|
@@ -963,6 +1089,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
963
1089
|
|
|
964
1090
|
|
|
965
1091
|
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
|
|
1101
|
+
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
|
|
1105
|
+
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
|
|
1109
|
+
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
|
|
966
1116
|
* @example
|
|
967
1117
|
* // Remove specific element
|
|
968
1118
|
* const q = new Queue<number>([1, 2, 3, 2]);
|
|
@@ -991,6 +1141,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
991
1141
|
|
|
992
1142
|
|
|
993
1143
|
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
|
|
1151
|
+
|
|
1152
|
+
|
|
1153
|
+
|
|
1154
|
+
|
|
1155
|
+
|
|
1156
|
+
|
|
1157
|
+
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
|
|
1167
|
+
|
|
994
1168
|
* @example
|
|
995
1169
|
* // Access element by index
|
|
996
1170
|
* const q = new Queue<string>(['a', 'b', 'c']);
|
|
@@ -1060,6 +1234,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
1060
1234
|
|
|
1061
1235
|
|
|
1062
1236
|
|
|
1237
|
+
|
|
1238
|
+
|
|
1239
|
+
|
|
1240
|
+
|
|
1241
|
+
|
|
1242
|
+
|
|
1243
|
+
|
|
1244
|
+
|
|
1245
|
+
|
|
1246
|
+
|
|
1247
|
+
|
|
1248
|
+
|
|
1249
|
+
|
|
1250
|
+
|
|
1251
|
+
|
|
1252
|
+
|
|
1253
|
+
|
|
1254
|
+
|
|
1255
|
+
|
|
1256
|
+
|
|
1257
|
+
|
|
1258
|
+
|
|
1259
|
+
|
|
1260
|
+
|
|
1063
1261
|
* @example
|
|
1064
1262
|
* // Remove all elements
|
|
1065
1263
|
* const q = new Queue<number>([1, 2, 3]);
|
|
@@ -1082,6 +1280,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
1082
1280
|
|
|
1083
1281
|
|
|
1084
1282
|
|
|
1283
|
+
|
|
1284
|
+
|
|
1285
|
+
|
|
1286
|
+
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
|
|
1292
|
+
|
|
1293
|
+
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
|
|
1297
|
+
|
|
1298
|
+
|
|
1299
|
+
|
|
1300
|
+
|
|
1301
|
+
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
|
|
1305
|
+
|
|
1306
|
+
|
|
1085
1307
|
* @example
|
|
1086
1308
|
* // Reclaim unused memory
|
|
1087
1309
|
* const q = new Queue<number>([1, 2, 3, 4, 5]);
|
|
@@ -1127,6 +1349,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
1127
1349
|
|
|
1128
1350
|
|
|
1129
1351
|
|
|
1352
|
+
|
|
1353
|
+
|
|
1354
|
+
|
|
1355
|
+
|
|
1356
|
+
|
|
1357
|
+
|
|
1358
|
+
|
|
1359
|
+
|
|
1360
|
+
|
|
1361
|
+
|
|
1362
|
+
|
|
1363
|
+
|
|
1364
|
+
|
|
1365
|
+
|
|
1366
|
+
|
|
1367
|
+
|
|
1368
|
+
|
|
1369
|
+
|
|
1370
|
+
|
|
1371
|
+
|
|
1372
|
+
|
|
1373
|
+
|
|
1374
|
+
|
|
1375
|
+
|
|
1130
1376
|
* @example
|
|
1131
1377
|
* // Create independent copy
|
|
1132
1378
|
* const q = new Queue<number>([1, 2, 3]);
|
|
@@ -1156,6 +1402,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
1156
1402
|
|
|
1157
1403
|
|
|
1158
1404
|
|
|
1405
|
+
|
|
1406
|
+
|
|
1407
|
+
|
|
1408
|
+
|
|
1409
|
+
|
|
1410
|
+
|
|
1411
|
+
|
|
1412
|
+
|
|
1413
|
+
|
|
1414
|
+
|
|
1415
|
+
|
|
1416
|
+
|
|
1417
|
+
|
|
1418
|
+
|
|
1419
|
+
|
|
1420
|
+
|
|
1421
|
+
|
|
1422
|
+
|
|
1423
|
+
|
|
1424
|
+
|
|
1425
|
+
|
|
1426
|
+
|
|
1427
|
+
|
|
1428
|
+
|
|
1159
1429
|
* @example
|
|
1160
1430
|
* // Filter elements
|
|
1161
1431
|
* const q = new Queue<number>([1, 2, 3, 4, 5]);
|
|
@@ -1189,6 +1459,30 @@ var Queue = class _Queue extends LinearBase {
|
|
|
1189
1459
|
|
|
1190
1460
|
|
|
1191
1461
|
|
|
1462
|
+
|
|
1463
|
+
|
|
1464
|
+
|
|
1465
|
+
|
|
1466
|
+
|
|
1467
|
+
|
|
1468
|
+
|
|
1469
|
+
|
|
1470
|
+
|
|
1471
|
+
|
|
1472
|
+
|
|
1473
|
+
|
|
1474
|
+
|
|
1475
|
+
|
|
1476
|
+
|
|
1477
|
+
|
|
1478
|
+
|
|
1479
|
+
|
|
1480
|
+
|
|
1481
|
+
|
|
1482
|
+
|
|
1483
|
+
|
|
1484
|
+
|
|
1485
|
+
|
|
1192
1486
|
* @example
|
|
1193
1487
|
* // Transform elements
|
|
1194
1488
|
* const q = new Queue<number>([1, 2, 3]);
|
|
@@ -1439,7 +1733,7 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1439
1733
|
if (isMapMode !== void 0) this._isMapMode = isMapMode;
|
|
1440
1734
|
if (isDuplicate !== void 0) this._isDuplicate = isDuplicate;
|
|
1441
1735
|
if (typeof toEntryFn === "function") this._toEntryFn = toEntryFn;
|
|
1442
|
-
else if (toEntryFn)
|
|
1736
|
+
else if (toEntryFn) raise(TypeError, ERR.notAFunction("toEntryFn", "BinaryTree"));
|
|
1443
1737
|
}
|
|
1444
1738
|
if (keysNodesEntriesOrRaws) this.setMany(keysNodesEntriesOrRaws);
|
|
1445
1739
|
}
|
|
@@ -1665,6 +1959,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1665
1959
|
|
|
1666
1960
|
|
|
1667
1961
|
|
|
1962
|
+
|
|
1963
|
+
|
|
1964
|
+
|
|
1965
|
+
|
|
1966
|
+
|
|
1967
|
+
|
|
1968
|
+
|
|
1969
|
+
|
|
1970
|
+
|
|
1971
|
+
|
|
1972
|
+
|
|
1973
|
+
|
|
1974
|
+
|
|
1975
|
+
|
|
1976
|
+
|
|
1977
|
+
|
|
1978
|
+
|
|
1979
|
+
|
|
1980
|
+
|
|
1981
|
+
|
|
1982
|
+
|
|
1983
|
+
|
|
1984
|
+
|
|
1985
|
+
|
|
1668
1986
|
* @example
|
|
1669
1987
|
* // Add a single node
|
|
1670
1988
|
* const tree = new BinaryTree<number>();
|
|
@@ -1695,6 +2013,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1695
2013
|
|
|
1696
2014
|
|
|
1697
2015
|
|
|
2016
|
+
|
|
2017
|
+
|
|
2018
|
+
|
|
2019
|
+
|
|
2020
|
+
|
|
2021
|
+
|
|
2022
|
+
|
|
2023
|
+
|
|
2024
|
+
|
|
2025
|
+
|
|
2026
|
+
|
|
2027
|
+
|
|
2028
|
+
|
|
2029
|
+
|
|
2030
|
+
|
|
2031
|
+
|
|
2032
|
+
|
|
2033
|
+
|
|
2034
|
+
|
|
2035
|
+
|
|
2036
|
+
|
|
2037
|
+
|
|
2038
|
+
|
|
2039
|
+
|
|
1698
2040
|
* @example
|
|
1699
2041
|
* // basic BinaryTree creation and insertion
|
|
1700
2042
|
* // Create a BinaryTree with entries
|
|
@@ -1777,6 +2119,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1777
2119
|
|
|
1778
2120
|
|
|
1779
2121
|
|
|
2122
|
+
|
|
2123
|
+
|
|
2124
|
+
|
|
2125
|
+
|
|
2126
|
+
|
|
2127
|
+
|
|
2128
|
+
|
|
2129
|
+
|
|
2130
|
+
|
|
2131
|
+
|
|
2132
|
+
|
|
2133
|
+
|
|
2134
|
+
|
|
2135
|
+
|
|
2136
|
+
|
|
2137
|
+
|
|
2138
|
+
|
|
2139
|
+
|
|
2140
|
+
|
|
2141
|
+
|
|
2142
|
+
|
|
2143
|
+
|
|
2144
|
+
|
|
2145
|
+
|
|
1780
2146
|
* @example
|
|
1781
2147
|
* // Bulk add
|
|
1782
2148
|
* const tree = new BinaryTree<number>();
|
|
@@ -1795,6 +2161,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1795
2161
|
* @returns An array of booleans indicating the success of each individual `set` operation.
|
|
1796
2162
|
|
|
1797
2163
|
|
|
2164
|
+
|
|
2165
|
+
|
|
2166
|
+
|
|
2167
|
+
|
|
2168
|
+
|
|
2169
|
+
|
|
2170
|
+
|
|
2171
|
+
|
|
2172
|
+
|
|
2173
|
+
|
|
2174
|
+
|
|
2175
|
+
|
|
2176
|
+
|
|
2177
|
+
|
|
2178
|
+
|
|
2179
|
+
|
|
2180
|
+
|
|
2181
|
+
|
|
2182
|
+
|
|
2183
|
+
|
|
2184
|
+
|
|
2185
|
+
|
|
2186
|
+
|
|
2187
|
+
|
|
1798
2188
|
* @example
|
|
1799
2189
|
* // Set multiple entries
|
|
1800
2190
|
* const tree = new BinaryTree<number, string>();
|
|
@@ -1834,6 +2224,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1834
2224
|
|
|
1835
2225
|
|
|
1836
2226
|
|
|
2227
|
+
|
|
2228
|
+
|
|
2229
|
+
|
|
2230
|
+
|
|
2231
|
+
|
|
2232
|
+
|
|
2233
|
+
|
|
2234
|
+
|
|
2235
|
+
|
|
2236
|
+
|
|
2237
|
+
|
|
2238
|
+
|
|
2239
|
+
|
|
2240
|
+
|
|
2241
|
+
|
|
2242
|
+
|
|
2243
|
+
|
|
2244
|
+
|
|
2245
|
+
|
|
2246
|
+
|
|
2247
|
+
|
|
2248
|
+
|
|
2249
|
+
|
|
2250
|
+
|
|
1837
2251
|
* @example
|
|
1838
2252
|
* // Combine trees
|
|
1839
2253
|
* const t1 = new BinaryTree<number>([1, 2]);
|
|
@@ -1872,6 +2286,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1872
2286
|
|
|
1873
2287
|
|
|
1874
2288
|
|
|
2289
|
+
|
|
2290
|
+
|
|
2291
|
+
|
|
2292
|
+
|
|
2293
|
+
|
|
2294
|
+
|
|
2295
|
+
|
|
2296
|
+
|
|
2297
|
+
|
|
2298
|
+
|
|
2299
|
+
|
|
2300
|
+
|
|
2301
|
+
|
|
2302
|
+
|
|
2303
|
+
|
|
2304
|
+
|
|
2305
|
+
|
|
2306
|
+
|
|
2307
|
+
|
|
2308
|
+
|
|
2309
|
+
|
|
2310
|
+
|
|
2311
|
+
|
|
2312
|
+
|
|
1875
2313
|
* @example
|
|
1876
2314
|
* // Remove a node
|
|
1877
2315
|
* const tree = new BinaryTree<number>([1, 2, 3, 4, 5]);
|
|
@@ -1988,6 +2426,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
1988
2426
|
|
|
1989
2427
|
|
|
1990
2428
|
|
|
2429
|
+
|
|
2430
|
+
|
|
2431
|
+
|
|
2432
|
+
|
|
2433
|
+
|
|
2434
|
+
|
|
2435
|
+
|
|
2436
|
+
|
|
2437
|
+
|
|
2438
|
+
|
|
2439
|
+
|
|
2440
|
+
|
|
2441
|
+
|
|
2442
|
+
|
|
2443
|
+
|
|
2444
|
+
|
|
2445
|
+
|
|
2446
|
+
|
|
2447
|
+
|
|
2448
|
+
|
|
2449
|
+
|
|
2450
|
+
|
|
2451
|
+
|
|
2452
|
+
|
|
1991
2453
|
* @example
|
|
1992
2454
|
* // Get node by key
|
|
1993
2455
|
* const tree = new BinaryTree<number, string>([[1, 'root'], [2, 'child']]);
|
|
@@ -2022,6 +2484,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2022
2484
|
|
|
2023
2485
|
|
|
2024
2486
|
|
|
2487
|
+
|
|
2488
|
+
|
|
2489
|
+
|
|
2490
|
+
|
|
2491
|
+
|
|
2492
|
+
|
|
2493
|
+
|
|
2494
|
+
|
|
2495
|
+
|
|
2496
|
+
|
|
2497
|
+
|
|
2498
|
+
|
|
2499
|
+
|
|
2500
|
+
|
|
2501
|
+
|
|
2502
|
+
|
|
2503
|
+
|
|
2504
|
+
|
|
2505
|
+
|
|
2506
|
+
|
|
2507
|
+
|
|
2508
|
+
|
|
2509
|
+
|
|
2510
|
+
|
|
2025
2511
|
* @example
|
|
2026
2512
|
* // Retrieve value by key
|
|
2027
2513
|
* const tree = new BinaryTree<number, string>([[1, 'root'], [2, 'left'], [3, 'right']]);
|
|
@@ -2058,6 +2544,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2058
2544
|
|
|
2059
2545
|
|
|
2060
2546
|
|
|
2547
|
+
|
|
2548
|
+
|
|
2549
|
+
|
|
2550
|
+
|
|
2551
|
+
|
|
2552
|
+
|
|
2553
|
+
|
|
2554
|
+
|
|
2555
|
+
|
|
2556
|
+
|
|
2557
|
+
|
|
2558
|
+
|
|
2559
|
+
|
|
2560
|
+
|
|
2561
|
+
|
|
2562
|
+
|
|
2563
|
+
|
|
2564
|
+
|
|
2565
|
+
|
|
2566
|
+
|
|
2567
|
+
|
|
2568
|
+
|
|
2569
|
+
|
|
2570
|
+
|
|
2061
2571
|
* @example
|
|
2062
2572
|
* // Remove all nodes
|
|
2063
2573
|
* const tree = new BinaryTree<number>([1, 2, 3]);
|
|
@@ -2082,6 +2592,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2082
2592
|
|
|
2083
2593
|
|
|
2084
2594
|
|
|
2595
|
+
|
|
2596
|
+
|
|
2597
|
+
|
|
2598
|
+
|
|
2599
|
+
|
|
2600
|
+
|
|
2601
|
+
|
|
2602
|
+
|
|
2603
|
+
|
|
2604
|
+
|
|
2605
|
+
|
|
2606
|
+
|
|
2607
|
+
|
|
2608
|
+
|
|
2609
|
+
|
|
2610
|
+
|
|
2611
|
+
|
|
2612
|
+
|
|
2613
|
+
|
|
2614
|
+
|
|
2615
|
+
|
|
2616
|
+
|
|
2617
|
+
|
|
2618
|
+
|
|
2085
2619
|
* @example
|
|
2086
2620
|
* // Check empty
|
|
2087
2621
|
* console.log(new BinaryTree().isEmpty()); // true;
|
|
@@ -2115,6 +2649,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2115
2649
|
|
|
2116
2650
|
|
|
2117
2651
|
|
|
2652
|
+
|
|
2653
|
+
|
|
2654
|
+
|
|
2655
|
+
|
|
2656
|
+
|
|
2657
|
+
|
|
2658
|
+
|
|
2659
|
+
|
|
2660
|
+
|
|
2661
|
+
|
|
2662
|
+
|
|
2663
|
+
|
|
2664
|
+
|
|
2665
|
+
|
|
2666
|
+
|
|
2667
|
+
|
|
2668
|
+
|
|
2669
|
+
|
|
2670
|
+
|
|
2671
|
+
|
|
2672
|
+
|
|
2673
|
+
|
|
2674
|
+
|
|
2675
|
+
|
|
2118
2676
|
* @example
|
|
2119
2677
|
* // Check BST property
|
|
2120
2678
|
* const tree = new BinaryTree<number>([1, 2, 3]);
|
|
@@ -2175,6 +2733,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2175
2733
|
|
|
2176
2734
|
|
|
2177
2735
|
|
|
2736
|
+
|
|
2737
|
+
|
|
2738
|
+
|
|
2739
|
+
|
|
2740
|
+
|
|
2741
|
+
|
|
2742
|
+
|
|
2743
|
+
|
|
2744
|
+
|
|
2745
|
+
|
|
2746
|
+
|
|
2747
|
+
|
|
2748
|
+
|
|
2749
|
+
|
|
2750
|
+
|
|
2751
|
+
|
|
2752
|
+
|
|
2753
|
+
|
|
2754
|
+
|
|
2755
|
+
|
|
2756
|
+
|
|
2757
|
+
|
|
2758
|
+
|
|
2759
|
+
|
|
2178
2760
|
* @example
|
|
2179
2761
|
* // Get depth of a node
|
|
2180
2762
|
* const tree = new BinaryTree<number>([1, 2, 3, 4, 5]);
|
|
@@ -2212,6 +2794,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2212
2794
|
|
|
2213
2795
|
|
|
2214
2796
|
|
|
2797
|
+
|
|
2798
|
+
|
|
2799
|
+
|
|
2800
|
+
|
|
2801
|
+
|
|
2802
|
+
|
|
2803
|
+
|
|
2804
|
+
|
|
2805
|
+
|
|
2806
|
+
|
|
2807
|
+
|
|
2808
|
+
|
|
2809
|
+
|
|
2810
|
+
|
|
2811
|
+
|
|
2812
|
+
|
|
2813
|
+
|
|
2814
|
+
|
|
2815
|
+
|
|
2816
|
+
|
|
2817
|
+
|
|
2818
|
+
|
|
2819
|
+
|
|
2820
|
+
|
|
2215
2821
|
* @example
|
|
2216
2822
|
* // Get tree height
|
|
2217
2823
|
* const tree = new BinaryTree<number>([1, 2, 3, 4, 5]);
|
|
@@ -2665,6 +3271,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2665
3271
|
|
|
2666
3272
|
|
|
2667
3273
|
|
|
3274
|
+
|
|
3275
|
+
|
|
3276
|
+
|
|
3277
|
+
|
|
3278
|
+
|
|
3279
|
+
|
|
3280
|
+
|
|
3281
|
+
|
|
3282
|
+
|
|
3283
|
+
|
|
3284
|
+
|
|
3285
|
+
|
|
3286
|
+
|
|
3287
|
+
|
|
3288
|
+
|
|
3289
|
+
|
|
3290
|
+
|
|
3291
|
+
|
|
3292
|
+
|
|
3293
|
+
|
|
3294
|
+
|
|
3295
|
+
|
|
3296
|
+
|
|
3297
|
+
|
|
2668
3298
|
* @example
|
|
2669
3299
|
* // Deep copy
|
|
2670
3300
|
* const tree = new BinaryTree<number>([1, 2, 3]);
|
|
@@ -2693,6 +3323,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2693
3323
|
|
|
2694
3324
|
|
|
2695
3325
|
|
|
3326
|
+
|
|
3327
|
+
|
|
3328
|
+
|
|
3329
|
+
|
|
3330
|
+
|
|
3331
|
+
|
|
3332
|
+
|
|
3333
|
+
|
|
3334
|
+
|
|
3335
|
+
|
|
3336
|
+
|
|
3337
|
+
|
|
3338
|
+
|
|
3339
|
+
|
|
3340
|
+
|
|
3341
|
+
|
|
3342
|
+
|
|
3343
|
+
|
|
3344
|
+
|
|
3345
|
+
|
|
3346
|
+
|
|
3347
|
+
|
|
3348
|
+
|
|
3349
|
+
|
|
2696
3350
|
* @example
|
|
2697
3351
|
* // Filter nodes by condition
|
|
2698
3352
|
* const tree = new BinaryTree<number>([1, 2, 3, 4]);
|
|
@@ -2725,6 +3379,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2725
3379
|
|
|
2726
3380
|
|
|
2727
3381
|
|
|
3382
|
+
|
|
3383
|
+
|
|
3384
|
+
|
|
3385
|
+
|
|
3386
|
+
|
|
3387
|
+
|
|
3388
|
+
|
|
3389
|
+
|
|
3390
|
+
|
|
3391
|
+
|
|
3392
|
+
|
|
3393
|
+
|
|
3394
|
+
|
|
3395
|
+
|
|
3396
|
+
|
|
3397
|
+
|
|
3398
|
+
|
|
3399
|
+
|
|
3400
|
+
|
|
3401
|
+
|
|
3402
|
+
|
|
3403
|
+
|
|
3404
|
+
|
|
3405
|
+
|
|
2728
3406
|
* @example
|
|
2729
3407
|
* // Transform to new tree
|
|
2730
3408
|
* const tree = new BinaryTree<number, number>([[1, 10], [2, 20]]);
|
|
@@ -2782,6 +3460,30 @@ var BinaryTree = class _BinaryTree extends IterableEntryBase {
|
|
|
2782
3460
|
|
|
2783
3461
|
|
|
2784
3462
|
|
|
3463
|
+
|
|
3464
|
+
|
|
3465
|
+
|
|
3466
|
+
|
|
3467
|
+
|
|
3468
|
+
|
|
3469
|
+
|
|
3470
|
+
|
|
3471
|
+
|
|
3472
|
+
|
|
3473
|
+
|
|
3474
|
+
|
|
3475
|
+
|
|
3476
|
+
|
|
3477
|
+
|
|
3478
|
+
|
|
3479
|
+
|
|
3480
|
+
|
|
3481
|
+
|
|
3482
|
+
|
|
3483
|
+
|
|
3484
|
+
|
|
3485
|
+
|
|
3486
|
+
|
|
2785
3487
|
* @example
|
|
2786
3488
|
* // Display tree
|
|
2787
3489
|
* const tree = new BinaryTree<number>([1, 2, 3]);
|
|
@@ -3413,12 +4115,16 @@ var BST = class extends BinaryTree {
|
|
|
3413
4115
|
} else {
|
|
3414
4116
|
this._comparator = this._createDefaultComparator();
|
|
3415
4117
|
}
|
|
4118
|
+
if (options.enableOrderStatistic) {
|
|
4119
|
+
this._enableOrderStatistic = true;
|
|
4120
|
+
}
|
|
3416
4121
|
} else {
|
|
3417
4122
|
this._comparator = this._createDefaultComparator();
|
|
3418
4123
|
}
|
|
3419
4124
|
if (keysNodesEntriesOrRaws) this.setMany(keysNodesEntriesOrRaws);
|
|
3420
4125
|
}
|
|
3421
4126
|
_root = void 0;
|
|
4127
|
+
_enableOrderStatistic = false;
|
|
3422
4128
|
/**
|
|
3423
4129
|
* Gets the root node of the tree.
|
|
3424
4130
|
* @remarks Time O(1)
|
|
@@ -3553,6 +4259,54 @@ var BST = class extends BinaryTree {
|
|
|
3553
4259
|
|
|
3554
4260
|
|
|
3555
4261
|
|
|
4262
|
+
|
|
4263
|
+
|
|
4264
|
+
|
|
4265
|
+
|
|
4266
|
+
|
|
4267
|
+
|
|
4268
|
+
|
|
4269
|
+
|
|
4270
|
+
|
|
4271
|
+
|
|
4272
|
+
|
|
4273
|
+
|
|
4274
|
+
|
|
4275
|
+
|
|
4276
|
+
|
|
4277
|
+
|
|
4278
|
+
|
|
4279
|
+
|
|
4280
|
+
|
|
4281
|
+
|
|
4282
|
+
|
|
4283
|
+
|
|
4284
|
+
|
|
4285
|
+
|
|
4286
|
+
|
|
4287
|
+
|
|
4288
|
+
|
|
4289
|
+
|
|
4290
|
+
|
|
4291
|
+
|
|
4292
|
+
|
|
4293
|
+
|
|
4294
|
+
|
|
4295
|
+
|
|
4296
|
+
|
|
4297
|
+
|
|
4298
|
+
|
|
4299
|
+
|
|
4300
|
+
|
|
4301
|
+
|
|
4302
|
+
|
|
4303
|
+
|
|
4304
|
+
|
|
4305
|
+
|
|
4306
|
+
|
|
4307
|
+
|
|
4308
|
+
|
|
4309
|
+
|
|
3556
4310
|
* @example
|
|
3557
4311
|
* // Get node object by key
|
|
3558
4312
|
* const bst = new BST<number, string>([[5, 'root'], [3, 'left'], [7, 'right']]);
|
|
@@ -3707,6 +4461,84 @@ var BST = class extends BinaryTree {
|
|
|
3707
4461
|
const searchRange = range instanceof Range ? range : new Range(range[0], range[1]);
|
|
3708
4462
|
return this.search(searchRange, false, callback, startNode, iterationType);
|
|
3709
4463
|
}
|
|
4464
|
+
getByRank(k, callback = this._DEFAULT_NODE_CALLBACK, iterationType = this.iterationType) {
|
|
4465
|
+
if (!this._enableOrderStatistic) {
|
|
4466
|
+
raise(Error, ERR.orderStatisticNotEnabled("getByRank"));
|
|
4467
|
+
}
|
|
4468
|
+
if (k < 0 || k >= this._size) return void 0;
|
|
4469
|
+
let actualCallback = void 0;
|
|
4470
|
+
let actualIterationType = this.iterationType;
|
|
4471
|
+
if (typeof callback === "string") {
|
|
4472
|
+
actualIterationType = callback;
|
|
4473
|
+
} else if (callback) {
|
|
4474
|
+
actualCallback = callback;
|
|
4475
|
+
if (iterationType) {
|
|
4476
|
+
actualIterationType = iterationType;
|
|
4477
|
+
}
|
|
4478
|
+
}
|
|
4479
|
+
const node = actualIterationType === "RECURSIVE" ? this._getByRankRecursive(this._root, k) : this._getByRankIterative(this._root, k);
|
|
4480
|
+
if (!node) return void 0;
|
|
4481
|
+
return actualCallback ? actualCallback(node) : node.key;
|
|
4482
|
+
}
|
|
4483
|
+
getRank(keyNodeEntryOrPredicate, iterationType = this.iterationType) {
|
|
4484
|
+
if (!this._enableOrderStatistic) {
|
|
4485
|
+
raise(Error, ERR.orderStatisticNotEnabled("getRank"));
|
|
4486
|
+
}
|
|
4487
|
+
if (!this._root || this._size === 0) return -1;
|
|
4488
|
+
let actualIterationType = this.iterationType;
|
|
4489
|
+
if (iterationType) actualIterationType = iterationType;
|
|
4490
|
+
let key;
|
|
4491
|
+
if (typeof keyNodeEntryOrPredicate === "function") {
|
|
4492
|
+
const results = this.search(keyNodeEntryOrPredicate, true);
|
|
4493
|
+
if (results.length === 0 || results[0] === void 0) return -1;
|
|
4494
|
+
key = results[0];
|
|
4495
|
+
} else if (keyNodeEntryOrPredicate === null || keyNodeEntryOrPredicate === void 0) {
|
|
4496
|
+
return -1;
|
|
4497
|
+
} else if (this.isNode(keyNodeEntryOrPredicate)) {
|
|
4498
|
+
key = keyNodeEntryOrPredicate.key;
|
|
4499
|
+
} else if (Array.isArray(keyNodeEntryOrPredicate)) {
|
|
4500
|
+
key = keyNodeEntryOrPredicate[0] ?? void 0;
|
|
4501
|
+
if (key === void 0 || key === null) return -1;
|
|
4502
|
+
} else {
|
|
4503
|
+
key = keyNodeEntryOrPredicate;
|
|
4504
|
+
}
|
|
4505
|
+
if (key === void 0) return -1;
|
|
4506
|
+
return actualIterationType === "RECURSIVE" ? this._getRankRecursive(this._root, key) : this._getRankIterative(this._root, key);
|
|
4507
|
+
}
|
|
4508
|
+
rangeByRank(start, end, callback = this._DEFAULT_NODE_CALLBACK, iterationType = this.iterationType) {
|
|
4509
|
+
if (!this._enableOrderStatistic) {
|
|
4510
|
+
raise(Error, ERR.orderStatisticNotEnabled("rangeByRank"));
|
|
4511
|
+
}
|
|
4512
|
+
if (this._size === 0) return [];
|
|
4513
|
+
const lo = Math.max(0, start);
|
|
4514
|
+
const hi = Math.min(this._size - 1, end);
|
|
4515
|
+
if (lo > hi) return [];
|
|
4516
|
+
let actualCallback = void 0;
|
|
4517
|
+
let actualIterationType = this.iterationType;
|
|
4518
|
+
if (typeof callback === "string") {
|
|
4519
|
+
actualIterationType = callback;
|
|
4520
|
+
} else if (callback) {
|
|
4521
|
+
actualCallback = callback;
|
|
4522
|
+
if (iterationType) {
|
|
4523
|
+
actualIterationType = iterationType;
|
|
4524
|
+
}
|
|
4525
|
+
}
|
|
4526
|
+
const results = [];
|
|
4527
|
+
const count = hi - lo + 1;
|
|
4528
|
+
const startNode = actualIterationType === "RECURSIVE" ? this._getByRankRecursive(this._root, lo) : this._getByRankIterative(this._root, lo);
|
|
4529
|
+
if (!startNode) return [];
|
|
4530
|
+
let collected = 0;
|
|
4531
|
+
const cb = actualCallback ?? this._DEFAULT_NODE_CALLBACK;
|
|
4532
|
+
let current = startNode;
|
|
4533
|
+
while (current && collected < count) {
|
|
4534
|
+
results.push(cb(current));
|
|
4535
|
+
collected++;
|
|
4536
|
+
if (collected < count) {
|
|
4537
|
+
current = this._next(current);
|
|
4538
|
+
}
|
|
4539
|
+
}
|
|
4540
|
+
return results;
|
|
4541
|
+
}
|
|
3710
4542
|
/**
|
|
3711
4543
|
* Adds a new node to the BST based on key comparison.
|
|
3712
4544
|
* @remarks Time O(log N), where H is tree height. O(N) worst-case (unbalanced tree), O(log N) average. Space O(1).
|
|
@@ -3734,6 +4566,78 @@ var BST = class extends BinaryTree {
|
|
|
3734
4566
|
|
|
3735
4567
|
|
|
3736
4568
|
|
|
4569
|
+
|
|
4570
|
+
|
|
4571
|
+
|
|
4572
|
+
|
|
4573
|
+
|
|
4574
|
+
|
|
4575
|
+
|
|
4576
|
+
|
|
4577
|
+
|
|
4578
|
+
|
|
4579
|
+
|
|
4580
|
+
|
|
4581
|
+
|
|
4582
|
+
|
|
4583
|
+
|
|
4584
|
+
|
|
4585
|
+
|
|
4586
|
+
|
|
4587
|
+
|
|
4588
|
+
|
|
4589
|
+
|
|
4590
|
+
|
|
4591
|
+
|
|
4592
|
+
|
|
4593
|
+
|
|
4594
|
+
|
|
4595
|
+
|
|
4596
|
+
|
|
4597
|
+
|
|
4598
|
+
|
|
4599
|
+
|
|
4600
|
+
|
|
4601
|
+
|
|
4602
|
+
|
|
4603
|
+
|
|
4604
|
+
|
|
4605
|
+
|
|
4606
|
+
|
|
4607
|
+
|
|
4608
|
+
|
|
4609
|
+
|
|
4610
|
+
|
|
4611
|
+
|
|
4612
|
+
|
|
4613
|
+
|
|
4614
|
+
|
|
4615
|
+
|
|
4616
|
+
|
|
4617
|
+
|
|
4618
|
+
|
|
4619
|
+
|
|
4620
|
+
|
|
4621
|
+
|
|
4622
|
+
|
|
4623
|
+
|
|
4624
|
+
|
|
4625
|
+
|
|
4626
|
+
|
|
4627
|
+
|
|
4628
|
+
|
|
4629
|
+
|
|
4630
|
+
|
|
4631
|
+
|
|
4632
|
+
|
|
4633
|
+
|
|
4634
|
+
|
|
4635
|
+
|
|
4636
|
+
|
|
4637
|
+
|
|
4638
|
+
|
|
4639
|
+
|
|
4640
|
+
|
|
3737
4641
|
|
|
3738
4642
|
|
|
3739
4643
|
|
|
@@ -3753,6 +4657,7 @@ var BST = class extends BinaryTree {
|
|
|
3753
4657
|
this._setRoot(newNode);
|
|
3754
4658
|
if (this._isMapMode && this.isRealNode(newNode)) this._store.set(newNode.key, newNode);
|
|
3755
4659
|
this._size++;
|
|
4660
|
+
this._updateCount(newNode);
|
|
3756
4661
|
return true;
|
|
3757
4662
|
}
|
|
3758
4663
|
let current = this._root;
|
|
@@ -3766,6 +4671,7 @@ var BST = class extends BinaryTree {
|
|
|
3766
4671
|
current.left = newNode;
|
|
3767
4672
|
if (this._isMapMode && this.isRealNode(newNode)) this._store.set(newNode.key, newNode);
|
|
3768
4673
|
this._size++;
|
|
4674
|
+
this._updateCountAlongPath(newNode);
|
|
3769
4675
|
return true;
|
|
3770
4676
|
}
|
|
3771
4677
|
if (current.left !== null) current = current.left;
|
|
@@ -3774,6 +4680,7 @@ var BST = class extends BinaryTree {
|
|
|
3774
4680
|
current.right = newNode;
|
|
3775
4681
|
if (this._isMapMode && this.isRealNode(newNode)) this._store.set(newNode.key, newNode);
|
|
3776
4682
|
this._size++;
|
|
4683
|
+
this._updateCountAlongPath(newNode);
|
|
3777
4684
|
return true;
|
|
3778
4685
|
}
|
|
3779
4686
|
if (current.right !== null) current = current.right;
|
|
@@ -3803,6 +4710,54 @@ var BST = class extends BinaryTree {
|
|
|
3803
4710
|
|
|
3804
4711
|
|
|
3805
4712
|
|
|
4713
|
+
|
|
4714
|
+
|
|
4715
|
+
|
|
4716
|
+
|
|
4717
|
+
|
|
4718
|
+
|
|
4719
|
+
|
|
4720
|
+
|
|
4721
|
+
|
|
4722
|
+
|
|
4723
|
+
|
|
4724
|
+
|
|
4725
|
+
|
|
4726
|
+
|
|
4727
|
+
|
|
4728
|
+
|
|
4729
|
+
|
|
4730
|
+
|
|
4731
|
+
|
|
4732
|
+
|
|
4733
|
+
|
|
4734
|
+
|
|
4735
|
+
|
|
4736
|
+
|
|
4737
|
+
|
|
4738
|
+
|
|
4739
|
+
|
|
4740
|
+
|
|
4741
|
+
|
|
4742
|
+
|
|
4743
|
+
|
|
4744
|
+
|
|
4745
|
+
|
|
4746
|
+
|
|
4747
|
+
|
|
4748
|
+
|
|
4749
|
+
|
|
4750
|
+
|
|
4751
|
+
|
|
4752
|
+
|
|
4753
|
+
|
|
4754
|
+
|
|
4755
|
+
|
|
4756
|
+
|
|
4757
|
+
|
|
4758
|
+
|
|
4759
|
+
|
|
4760
|
+
|
|
3806
4761
|
* @example
|
|
3807
4762
|
* // Set multiple key-value pairs
|
|
3808
4763
|
* const bst = new BST<number, string>();
|
|
@@ -4066,6 +5021,30 @@ var BST = class extends BinaryTree {
|
|
|
4066
5021
|
|
|
4067
5022
|
|
|
4068
5023
|
|
|
5024
|
+
|
|
5025
|
+
|
|
5026
|
+
|
|
5027
|
+
|
|
5028
|
+
|
|
5029
|
+
|
|
5030
|
+
|
|
5031
|
+
|
|
5032
|
+
|
|
5033
|
+
|
|
5034
|
+
|
|
5035
|
+
|
|
5036
|
+
|
|
5037
|
+
|
|
5038
|
+
|
|
5039
|
+
|
|
5040
|
+
|
|
5041
|
+
|
|
5042
|
+
|
|
5043
|
+
|
|
5044
|
+
|
|
5045
|
+
|
|
5046
|
+
|
|
5047
|
+
|
|
4069
5048
|
* @example
|
|
4070
5049
|
* // Rebalance the tree
|
|
4071
5050
|
* const bst = new BST<number>();
|
|
@@ -4111,6 +5090,30 @@ var BST = class extends BinaryTree {
|
|
|
4111
5090
|
|
|
4112
5091
|
|
|
4113
5092
|
|
|
5093
|
+
|
|
5094
|
+
|
|
5095
|
+
|
|
5096
|
+
|
|
5097
|
+
|
|
5098
|
+
|
|
5099
|
+
|
|
5100
|
+
|
|
5101
|
+
|
|
5102
|
+
|
|
5103
|
+
|
|
5104
|
+
|
|
5105
|
+
|
|
5106
|
+
|
|
5107
|
+
|
|
5108
|
+
|
|
5109
|
+
|
|
5110
|
+
|
|
5111
|
+
|
|
5112
|
+
|
|
5113
|
+
|
|
5114
|
+
|
|
5115
|
+
|
|
5116
|
+
|
|
4114
5117
|
* @example
|
|
4115
5118
|
* // Check if tree is height-balanced
|
|
4116
5119
|
* const bst = new BST<number>([3, 1, 5, 2, 4]);
|
|
@@ -4185,6 +5188,54 @@ var BST = class extends BinaryTree {
|
|
|
4185
5188
|
|
|
4186
5189
|
|
|
4187
5190
|
|
|
5191
|
+
|
|
5192
|
+
|
|
5193
|
+
|
|
5194
|
+
|
|
5195
|
+
|
|
5196
|
+
|
|
5197
|
+
|
|
5198
|
+
|
|
5199
|
+
|
|
5200
|
+
|
|
5201
|
+
|
|
5202
|
+
|
|
5203
|
+
|
|
5204
|
+
|
|
5205
|
+
|
|
5206
|
+
|
|
5207
|
+
|
|
5208
|
+
|
|
5209
|
+
|
|
5210
|
+
|
|
5211
|
+
|
|
5212
|
+
|
|
5213
|
+
|
|
5214
|
+
|
|
5215
|
+
|
|
5216
|
+
|
|
5217
|
+
|
|
5218
|
+
|
|
5219
|
+
|
|
5220
|
+
|
|
5221
|
+
|
|
5222
|
+
|
|
5223
|
+
|
|
5224
|
+
|
|
5225
|
+
|
|
5226
|
+
|
|
5227
|
+
|
|
5228
|
+
|
|
5229
|
+
|
|
5230
|
+
|
|
5231
|
+
|
|
5232
|
+
|
|
5233
|
+
|
|
5234
|
+
|
|
5235
|
+
|
|
5236
|
+
|
|
5237
|
+
|
|
5238
|
+
|
|
4188
5239
|
* @example
|
|
4189
5240
|
* // Transform to new tree
|
|
4190
5241
|
* const bst = new BST<number, number>([[1, 10], [2, 20], [3, 30]]);
|
|
@@ -4259,13 +5310,11 @@ var BST = class extends BinaryTree {
|
|
|
4259
5310
|
if (a instanceof Date && b instanceof Date) {
|
|
4260
5311
|
const ta = a.getTime();
|
|
4261
5312
|
const tb = b.getTime();
|
|
4262
|
-
if (Number.isNaN(ta) || Number.isNaN(tb))
|
|
5313
|
+
if (Number.isNaN(ta) || Number.isNaN(tb)) raise(TypeError, ERR.invalidDate("BST"));
|
|
4263
5314
|
return ta > tb ? 1 : ta < tb ? -1 : 0;
|
|
4264
5315
|
}
|
|
4265
5316
|
if (typeof a === "object" || typeof b === "object") {
|
|
4266
|
-
|
|
4267
|
-
ERR.comparatorRequired("BST")
|
|
4268
|
-
);
|
|
5317
|
+
raise(TypeError, ERR.comparatorRequired("BST"));
|
|
4269
5318
|
}
|
|
4270
5319
|
return 0;
|
|
4271
5320
|
};
|
|
@@ -4584,7 +5633,8 @@ var BST = class extends BinaryTree {
|
|
|
4584
5633
|
_snapshotOptions() {
|
|
4585
5634
|
return {
|
|
4586
5635
|
...super._snapshotOptions(),
|
|
4587
|
-
comparator: this._comparator
|
|
5636
|
+
comparator: this._comparator,
|
|
5637
|
+
enableOrderStatistic: this._enableOrderStatistic
|
|
4588
5638
|
};
|
|
4589
5639
|
}
|
|
4590
5640
|
/**
|
|
@@ -4606,6 +5656,113 @@ var BST = class extends BinaryTree {
|
|
|
4606
5656
|
*
|
|
4607
5657
|
* @param v - The node to set as root.
|
|
4608
5658
|
*/
|
|
5659
|
+
/**
|
|
5660
|
+
* (Protected) Recalculates the subtree count for a single node.
|
|
5661
|
+
* @remarks Time O(1). Only active when enableOrderStatistic is true.
|
|
5662
|
+
*/
|
|
5663
|
+
_updateCount(node) {
|
|
5664
|
+
if (!this._enableOrderStatistic) return;
|
|
5665
|
+
node._count = 1 + (this.isRealNode(node.left) ? node.left._count : 0) + (this.isRealNode(node.right) ? node.right._count : 0);
|
|
5666
|
+
}
|
|
5667
|
+
/**
|
|
5668
|
+
* (Protected) Updates subtree counts from a node up to the root.
|
|
5669
|
+
* @remarks Time O(log n). Only active when enableOrderStatistic is true.
|
|
5670
|
+
*/
|
|
5671
|
+
_updateCountAlongPath(node) {
|
|
5672
|
+
if (!this._enableOrderStatistic) return;
|
|
5673
|
+
let current = node;
|
|
5674
|
+
while (current) {
|
|
5675
|
+
this._updateCount(current);
|
|
5676
|
+
current = current.parent;
|
|
5677
|
+
}
|
|
5678
|
+
}
|
|
5679
|
+
/**
|
|
5680
|
+
* (Protected) Finds the node at position k in tree order (iterative).
|
|
5681
|
+
* @remarks Time O(log n), Space O(1)
|
|
5682
|
+
*/
|
|
5683
|
+
_getByRankIterative(node, k) {
|
|
5684
|
+
let current = node;
|
|
5685
|
+
let remaining = k;
|
|
5686
|
+
while (current) {
|
|
5687
|
+
const leftCount = this.isRealNode(current.left) ? current.left._count : 0;
|
|
5688
|
+
if (remaining < leftCount) {
|
|
5689
|
+
current = current.left;
|
|
5690
|
+
} else if (remaining === leftCount) {
|
|
5691
|
+
return current;
|
|
5692
|
+
} else {
|
|
5693
|
+
remaining = remaining - leftCount - 1;
|
|
5694
|
+
current = current.right;
|
|
5695
|
+
}
|
|
5696
|
+
}
|
|
5697
|
+
return void 0;
|
|
5698
|
+
}
|
|
5699
|
+
/**
|
|
5700
|
+
* (Protected) Finds the node at position k in tree order (recursive).
|
|
5701
|
+
* @remarks Time O(log n), Space O(log n) call stack
|
|
5702
|
+
*/
|
|
5703
|
+
_getByRankRecursive(node, k) {
|
|
5704
|
+
if (!node) return void 0;
|
|
5705
|
+
const leftCount = this.isRealNode(node.left) ? node.left._count : 0;
|
|
5706
|
+
if (k < leftCount) return this._getByRankRecursive(node.left, k);
|
|
5707
|
+
if (k === leftCount) return node;
|
|
5708
|
+
return this._getByRankRecursive(node.right, k - leftCount - 1);
|
|
5709
|
+
}
|
|
5710
|
+
/**
|
|
5711
|
+
* (Protected) Computes the rank of a key iteratively.
|
|
5712
|
+
* @remarks Time O(log n), Space O(1)
|
|
5713
|
+
*/
|
|
5714
|
+
_getRankIterative(node, key) {
|
|
5715
|
+
let rank = 0;
|
|
5716
|
+
let current = node;
|
|
5717
|
+
while (this.isRealNode(current)) {
|
|
5718
|
+
const cmp = this._compare(current.key, key);
|
|
5719
|
+
if (cmp > 0) {
|
|
5720
|
+
current = current.left;
|
|
5721
|
+
} else if (cmp < 0) {
|
|
5722
|
+
rank += (this.isRealNode(current.left) ? current.left._count : 0) + 1;
|
|
5723
|
+
current = current.right;
|
|
5724
|
+
} else {
|
|
5725
|
+
rank += this.isRealNode(current.left) ? current.left._count : 0;
|
|
5726
|
+
return rank;
|
|
5727
|
+
}
|
|
5728
|
+
}
|
|
5729
|
+
return rank;
|
|
5730
|
+
}
|
|
5731
|
+
/**
|
|
5732
|
+
* (Protected) Computes the rank of a key recursively.
|
|
5733
|
+
* @remarks Time O(log n), Space O(log n) call stack
|
|
5734
|
+
*/
|
|
5735
|
+
_getRankRecursive(node, key) {
|
|
5736
|
+
if (!node) return 0;
|
|
5737
|
+
const cmp = this._compare(node.key, key);
|
|
5738
|
+
if (cmp > 0) {
|
|
5739
|
+
return this._getRankRecursive(node.left, key);
|
|
5740
|
+
} else if (cmp < 0) {
|
|
5741
|
+
return (this.isRealNode(node.left) ? node.left._count : 0) + 1 + this._getRankRecursive(node.right, key);
|
|
5742
|
+
} else {
|
|
5743
|
+
return this.isRealNode(node.left) ? node.left._count : 0;
|
|
5744
|
+
}
|
|
5745
|
+
}
|
|
5746
|
+
/**
|
|
5747
|
+
* (Protected) Finds the in-order successor of a node.
|
|
5748
|
+
* @remarks Time O(log n), Space O(1)
|
|
5749
|
+
*/
|
|
5750
|
+
_next(node) {
|
|
5751
|
+
if (this.isRealNode(node.right)) {
|
|
5752
|
+
let current2 = node.right;
|
|
5753
|
+
while (this.isRealNode(current2.left)) {
|
|
5754
|
+
current2 = current2.left;
|
|
5755
|
+
}
|
|
5756
|
+
return current2;
|
|
5757
|
+
}
|
|
5758
|
+
let current = node;
|
|
5759
|
+
let parent = current.parent;
|
|
5760
|
+
while (parent && current === parent.right) {
|
|
5761
|
+
current = parent;
|
|
5762
|
+
parent = parent.parent;
|
|
5763
|
+
}
|
|
5764
|
+
return parent;
|
|
5765
|
+
}
|
|
4609
5766
|
_setRoot(v) {
|
|
4610
5767
|
if (v) v.parent = void 0;
|
|
4611
5768
|
this._root = v;
|
|
@@ -4652,21 +5809,28 @@ var BST = class extends BinaryTree {
|
|
|
4652
5809
|
while (x.left !== void 0 && x.left !== null) x = x.left;
|
|
4653
5810
|
return x;
|
|
4654
5811
|
}, "minNode");
|
|
5812
|
+
let countUpdateStart;
|
|
4655
5813
|
if (node.left === void 0) {
|
|
5814
|
+
countUpdateStart = node.parent;
|
|
4656
5815
|
transplant(node, node.right);
|
|
4657
5816
|
} else if (node.right === void 0) {
|
|
5817
|
+
countUpdateStart = node.parent;
|
|
4658
5818
|
transplant(node, node.left);
|
|
4659
5819
|
} else {
|
|
4660
5820
|
const succ = minNode(node.right);
|
|
4661
5821
|
if (succ.parent !== node) {
|
|
5822
|
+
countUpdateStart = succ.parent;
|
|
4662
5823
|
transplant(succ, succ.right);
|
|
4663
5824
|
succ.right = node.right;
|
|
4664
5825
|
if (succ.right) succ.right.parent = succ;
|
|
5826
|
+
} else {
|
|
5827
|
+
countUpdateStart = succ;
|
|
4665
5828
|
}
|
|
4666
5829
|
transplant(node, succ);
|
|
4667
5830
|
succ.left = node.left;
|
|
4668
5831
|
if (succ.left) succ.left.parent = succ;
|
|
4669
5832
|
}
|
|
5833
|
+
this._updateCountAlongPath(countUpdateStart);
|
|
4670
5834
|
this._size = Math.max(0, this._size - 1);
|
|
4671
5835
|
return true;
|
|
4672
5836
|
}
|
|
@@ -4686,5 +5850,6 @@ exports.BinaryTreeNode = BinaryTreeNode;
|
|
|
4686
5850
|
exports.DFSOperation = DFSOperation;
|
|
4687
5851
|
exports.ERR = ERR;
|
|
4688
5852
|
exports.Range = Range;
|
|
5853
|
+
exports.raise = raise;
|
|
4689
5854
|
//# sourceMappingURL=index.cjs.map
|
|
4690
5855
|
//# sourceMappingURL=index.cjs.map
|