Использование предшественников вернет только узлы с прямым ребром во входной узел. Найти всех предков всех узлов можно следующим образом:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
# G is:
# e-->f
# ^
# |
# a--->b-->c-->d
#
G.add_edges_from([('a', 'b'),('b', 'c'),('c', 'd'), ('b', 'e'), ('e', 'f')])
T = nx.dfs_tree(G.reverse(), source='f').reverse()
# T is: a-->b-->e-->f
pos = nx.nx_pydot.pydot_layout(T, prog='dot')
nx.draw_networkx(T, pos=pos, arrows= True, with_labels=True)
plt.show()
Мы просто запускаем DFS из узла ввода на обращенном ориентированном графе, а затем снова обращаем результат, чтобы получить ребра в их первоначальном направлении.
Последние три строки предназначены для рисования результата.