docs: def simplex_find_tree(self):
          '''
          API:
              simplex_find_tree(self)
          Description:
              Assumes a feasible flow solution stored in 'flow' attribute's of
              arcs and converts this solution to a feasible spanning tree
              solution.
          Pre:
              (1) 'flow' attributes represents a feasible flow solution.
          Post:
              (1) 'flow' attributes may change when eliminating cycles.
          Return:
              Return a Graph instance that is a spanning tree solution.
          '''
          # find a cycle
          solution_g = self.get_simplex_solution_graph()
          cycle = solution_g.simplex_find_cycle()
          while cycle is not None:
              # find amount to augment and direction
              amount = self.simplex_augment_cycle(cycle)
              # augment along the cycle
              self.augment_cycle(amount, cycle)
              # find a new cycle
              solution_g = self.get_simplex_solution_graph()
              cycle = solution_g.simplex_find_cycle()
          # check if the solution is connected
          while self.simplex_connect(solution_g):
              pass
          # add attributes
          for e in self.edge_attr:
              flow = self.edge_attr[e]['flow']
              capacity = self.edge_attr[e]['capacity']
              cost = self.edge_attr[e]['cost']
              self.edge_attr[e]['label'] = "%d/%d/%d" %(flow,capacity,cost)
              if e in solution_g.edge_attr:
                  solution_g.edge_attr[e]['flow'] = flow
                  solution_g.edge_attr[e]['capacity'] = capacity
                  solution_g.edge_attr[e]['cost'] = cost
                  solution_g.edge_attr[e]['label'] = "%d/%d/%d" %(flow,capacity,cost)
          return solution_g