given an interval, get intervals in the tree that are intersected.

    :param start: start of the intersecting interval
    :param end:   end of the intersecting interval
    :return:      the list of intersected intervals

def intersectingInterval(self, start, end):
    """
    given an interval, get intervals in the tree that are intersected.

    :param start: start of the intersecting interval
    :param end:   end of the intersecting interval
    :return:      the list of intersected intervals
    """
    # find all intervals in this node that intersect start and end
    l = []
    for x in self.data.starts:
      xStartsAfterInterval = (x.start > end and not self.openEnded) or \
                             (x.start >= end and self.openEnded)
      xEndsBeforeInterval = (x.end < start and not self.openEnded) or \
                            (x.end <= start and self.openEnded)
      if ((not xStartsAfterInterval) and (not xEndsBeforeInterval)):
        l.append(x)

    # process left subtree (if we have one) if the requested interval begins
    # before mid
    if self.left is not None and start <= self.data.mid:
      l += self.left.intersectingInterval(start, end)

    # process right subtree (if we have one) if the requested interval ends
    # after mid
    if self.right is not None and end >= self.data.mid:
      l += self.right.intersectingInterval(start, end)

    return l