code: def add_left_child(self, n, parent, **attrs):
          '''
          API: add_left_child(self, n, parent, **attrs)
          Description:
              Adds left child n to node parent.
          Pre:
              Left child of parent should not exist.
          Input:
              n: Node name.
              parent: Parent node name.
              attrs: Attributes of node n.
          '''
          if self.get_left_child(parent) is not None:
              msg = "Right child already exists for node " + str(parent)
              raise Exception(msg)
          attrs['direction'] = 'L'
          self.set_node_attr(parent, 'Lchild', n)
          self.add_child(n, parent, **attrsf add_left_child(self, n, parent, **attrs):
          '''
          API: add_left_child(self, n, parent, **attrs)
          Description:
              Adds left child n to node parent.
          Pre:
              Left child of parent should not exist.
          Input:
              n: Node name.
              parent: Parent node name.
              attrs: Attributes of node n.
          '''
          if self.get_left_child(parent) is not None:
              msg = "Right child already exists for node " + str(parent)
              raise Exception(msg)
          attrs['direction'] = 'L'
          self.set_node_attr(parent, 'Lchild', n)
          self.add_child(n, parent, **attrs)
docs: API: add_left_child(self, n, parent, **attrs)
          Description:
              Adds left child n to node parent.
          Pre:
              Left child of parent should not exist.
          Input:
              n: Node name.
              parent: Parent node name.
              attrs: Attributes of node n.