public IntervalNodeOri(Markers markers) { intervals = new TreeMap<Marker, List<Marker>>(); SortedSet<Integer> endpoints = new TreeSet<Integer>(); for (Interval interval : markers) { endpoints.add(interval.getStart()); endpoints.add(interval.getEnd()); } if (endpoints.isEmpty()) { center = 0; return; } int median = getMedian(endpoints); center = median; Markers left = new Markers(); Markers right = new Markers(); for (Marker interval : markers) { if (interval.getEnd() < median) left.add(interval); else if (interval.getStart() > median) right.add(interval); else { List<Marker> posting = intervals.get(interval); if (posting == null) { posting = new ArrayList<Marker>(); intervals.put(interval, posting); } posting.add(interval); } } if (left.size() > 0) leftNode = new IntervalNodeOri(left); if (right.size() > 0) rightNode = new IntervalNodeOri(right); }