text: # Time:  O(n)
  # Space: O(n)
  
  # tree
  class Solution(object):
      def createBinaryTree(self, descriptions):
          """
          :type descriptions: List[List[int]]
          :rtype: Optional[TreeNode]
          """
          nodes = {}
          children = set()
          for p, c, l in descriptions:
              parent = nodes.setdefault(p, TreeNode(p))
              child = nodes.setdefault(c, TreeNode(c))
              if l:
                  parent.left = child
              else:
                  parent.right = child
              children.add(c)
          return nodes[next(p for p in nodes.iterkeys() if p not in children)]
  