Вместо того, чтобы пытаться создать особый случай последней вершины, особый случай - первой.То есть не пытайтесь выяснить, когда не следует добавлять "->", просто не делайте этого для первой вершины:
def DFS(self, vertex=None, visited=None):
if vertex is None:
vertex = self.root
else:
# Not the first vertex, so need to add the separator.
print(f" ->", end='')
if visited is None:
visited = []
print(f"{vertex}", end='')
visited.append(vertex)
for neighbor in self.getNeighbors(vertex):
if neighbor not in visited:
# no need to append here, because it will be done in the recursive call.
# and the vertex will be printed in the recursive call, too.
# visited.append(neighbor)
# print(f"{neighbor} -> ", end='')
self.DFS(neighbor, visited)
Это предполагает, что ваш начальный вызов всегда будет DFS(root, None, visited)
.Что я считаю разумным предположением.
Если подумать, возможно, лучше использовать параметр visited
в качестве условия:
if vertex is None:
vertex = self.root
if visited is None:
visited = []
else:
# Not the first vertex, so need to add the separator.
print(f" ->", end='')
print(f"{vertex}", end='')
Суть в том, что легчеспециальный случай первый элемент, чем последний.