Skip to content

Commit 719d6a0

Browse files
committed
Interval tree initial commit
1 parent 1834f40 commit 719d6a0

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
function Node(start, end, left, right) {
2+
this.interval = [start, end];
3+
this.maxRight = -Infinity;
4+
this.parentNode = null;
5+
this.left = left;
6+
this.right = right;
7+
}
8+
9+
function IntervalTree() {
10+
this.root = null;
11+
}
12+
13+
function addNode(node, side, interval) {
14+
var child = new Node(interval[0], interval[1]);
15+
child.parentNode = node;
16+
node[side] = child;
17+
if (side === 'right' && node.maxRight < interval[1]) {
18+
while (child) {
19+
child.maxRight = interval[1];
20+
child = child.parentNode;
21+
}
22+
}
23+
}
24+
25+
function addHelper(node, interval) {
26+
if (node.interval[0] > interval[0]) {
27+
if (node.left) {
28+
addHelper(node.left, interval);
29+
} else {
30+
addNode(node, 'left', interval);
31+
}
32+
} else {
33+
if (node.right) {
34+
addHelper(node.right, interval);
35+
} else {
36+
addNode(node, 'right', interval);
37+
}
38+
}
39+
}
40+
41+
IntervalTree.prototype.add = function (interval) {
42+
if (!this.root) {
43+
this.root = new Node(interval[0], interval[1]);
44+
return;
45+
}
46+
addHelper(this.root, interval);
47+
};

0 commit comments

Comments
 (0)