TreeMap(Binary Tree python) main idea: create a binary tree where each node store start and end time ,and meanwhile can track left and right neighbour. Note, left neighbour means its end time is less than current node’s start time, vise versa.

# time O(NlgN), worst N^2 space O(N) 
class Node:
    def __init__(self,start,end):
        self.s = start
        self.e = end
        self.l = None
        self.r = None
        
    def insert(self,node):
        if node.s >= self.e:# right insert candidate
            if not self.r:
                self.r = node
                return True
            return self.r.insert(node)
        
        elif node.e<= self.s: # left insert candidate
            if not self.l:
                self.l = node
                return True
            return self.l.insert(node)
        else:
            return False


class MyCalendar:

    def __init__(self):
        self.root = None
    def book(self, start: int, end: int) -> bool:
        if not self.root:
            self.root = Node(start,end)
            return True
        return self.root.insert(Node(start,end))


# Your MyCalendar object will be instantiated and called as such:
# obj = MyCalendar()
# param_1 = obj.book(start,end)