def delete_min(self):
        """
        Delete the left-most value from a tree.
        """

        # Base case: If there are no nodes lesser than this node, then this is the
        # node to delete.
        if self.left is NULL:
            return NULL, self.value

        # Acquire more reds if necessary to continue the traversal. The
        # double-deep check is fine because NULL is red.
        if not self.left.red and not self.left.left.red:
            self = self.move_red_left()

        # Recursive case: Delete the minimum node of all nodes lesser than this
        # node.
        left, value = self.left.delete_min()
        self = self._replace(left=left)

        return self.balance(), value
Delete the left-most value from a tree.