def build(self, array): if len(array) > 0: # counting the median, which is the key median = IntervalTree.get_median_point(self, array) # current Node n = Node(median) left = [] right = [] overlap = [] for i in range(0, len(array)): if array[i].begin <= median <= array[i].end: overlap.append(array[i]) elif array[i].end < median: left.append(array[i]) elif array[i].begin > median: right.append(array[i]) n.overlap_begin_sort = sorted(overlap, key=operator.attrgetter("begin")) n.overlap_end_sort = sorted(overlap, key=operator.attrgetter("end"), reverse=True) if self.root is None: self.root = n n.left = self.build(left) n.right = self.build(right) return n else: return None