code: def add(self, interval):
          
          if interval in self:
              return
  
          if interval.is_null():
              raise ValueError(
                  "IntervalTree: Null Interval objects not allowed in IntervalTree:"
                  " {0}".format(interval)
              )
  
          if not self.top_node:
              self.top_node = Node.from_interval(interval)
          else:
              self.top_node = self.top_node.add(interval)
          self.all_intervals.add(interval)
          self._add_boundaries(interval)
docs: Adds an interval to the tree, if not already present.
  
          Completes in O(log n) time.