Skip to content

Commit 02d4a75

Browse files
committed
Add incomplete deletion
1 parent fe35792 commit 02d4a75

File tree

1 file changed

+59
-13
lines changed

1 file changed

+59
-13
lines changed

src/data-structures/interval-tree.js

Lines changed: 59 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -111,21 +111,67 @@
111111
return heightHelper(this.root);
112112
};
113113

114+
// adjust the max value
115+
IntervalTree.prototype.removeHelper = function (interval, node) {
116+
if (!node) {
117+
return;
118+
}
119+
if (node.interval[0] === interval[0] &&
120+
node.interval[1] === interval[1]) {
121+
if (node.left && node.right) {
122+
var replacement = node.left;
123+
while (replacement.left) {
124+
replacement = replacement.left;
125+
}
126+
var temp = replacement.interval;
127+
replacement.interval = node.interval;
128+
node.interval = temp;
129+
this._removeHelper(replacement.interval, node);
130+
} else {
131+
var side = 'left';
132+
if (node.right) {
133+
side = 'right';
134+
}
135+
var parentNode = node.parentNode;
136+
if (parentNode) {
137+
if (parentNode.left === node) {
138+
parentNode.left = node[side];
139+
} else {
140+
parentNode.right = node[side];
141+
}
142+
node[side].parentNode = parentNode;
143+
} else {
144+
this.root = node[side];
145+
this.root.parentNode = null;
146+
}
147+
}
148+
} else {
149+
// could be optimized
150+
this._removeHelper(interval, node.left);
151+
this._removeHelper(interval, node.right);
152+
}
153+
};
154+
155+
IntervalTree.prototype.remove = function (interval) {
156+
return this._removeHelper(interval, this.root);
157+
};
158+
114159
exports.Node = Node;
115160
exports.IntervalTree = IntervalTree;
116161

117162
}(typeof exports === 'undefined' ? window : exports));
118163

119-
//
120-
// var t = new IntervalTree();
121-
//
122-
// t.add([1, 2]);
123-
// t.add([-1, 8]);
124-
// t.add([-1, 18]);
125-
// t.add([2, 4]);
126-
// t.add([8, 13]);
127-
// t.add([2, 10]);
128-
//
129-
// console.log(t.intersects([19, 29]));
130-
// console.log(t.contains(16));
131-
// console.log(t.height());
164+
var IntervalTree = exports.IntervalTree;
165+
166+
var t = new IntervalTree();
167+
168+
t.add([1, 2]);
169+
t.add([-1, 8]);
170+
t.add([-1, 18]);
171+
t.add([2, 4]);
172+
t.add([8, 13]);
173+
t.add([2, 10]);
174+
175+
console.log(t.intersects([19, 29]));
176+
console.log(t.contains(16));
177+
console.log(t.height());

0 commit comments

Comments
 (0)