Python 如何在networkx中手工实现DFS

Python 如何在networkx中手工实现DFS,python,networkx,Python,Networkx,我想手动实现一个简单的DFS树的预序遍历。作为一个玩具示例,下面是一棵简单的树: import matplotlib.pyplot as plt import networkx as nx T = nx.generators.balanced_tree(2, 3) nx.draw_networkx(T) plt.show() 由于这是一个二叉树,原则上我应该能够通过以下方式执行预序遍历: def preOrder(root): if root: print(root.

我想手动实现一个简单的DFS树的预序遍历。作为一个玩具示例,下面是一棵简单的树:

import matplotlib.pyplot as plt
import networkx as nx
T = nx.generators.balanced_tree(2, 3)
nx.draw_networkx(T)
plt.show()

由于这是一个二叉树,原则上我应该能够通过以下方式执行预序遍历:

def preOrder(root):
    if root:
        print(root.data)
        preOrder(root.left)
        preOrder(root.right)
但是,我不知道如何在networkx中实现这一点。如何查找根目录以及node.left和node.right的networkx版本是什么


更新1
networkx中有
列表(nx.dfs\u preorder\u节点(T,source=r,depth\u limit=1))
将树视为一个无向图,并查找它视为根的
r
中的所有子节点。例如,我不知道如何使用它来模拟node.left和node.right来执行预排序遍历。例如,如果
r=1
[0,3,4]。在您的情况下,您可以使用
dfs\u preorder\u节点
,并将深度限制为
1

>>> G = nx.path_graph(5)
>>> list(nx.dfs_preorder_nodes(G, source=0))
[0, 1, 2, 3, 4]
>>> list(nx.dfs_preorder_nodes(G, source=0, depth_limit=1))
[0, 1]
请注意API:

如果未指定源,则任意选择源,并且 重复搜索,直到搜索到图形中的所有组件


Networkx允许您以各种方式访问图形的节点。在您的情况下,您可以使用
dfs\u preorder\u节点
,并将深度限制为
1

>>> G = nx.path_graph(5)
>>> list(nx.dfs_preorder_nodes(G, source=0))
[0, 1, 2, 3, 4]
>>> list(nx.dfs_preorder_nodes(G, source=0, depth_limit=1))
[0, 1]
请注意API:

如果未指定源,则任意选择源,并且 重复搜索,直到搜索到图形中的所有组件


这似乎没有父母和孩子的概念。例如,
列表(nx.dfs\u preorder\u节点(T,source=1,depth\u limit=1))
给出了
[1,0,3,4]
@Anush在您的示例中,它给出了父节点的所有子节点。哦,我明白了,它需要1作为根节点。那么我不知道如何使用它来实现DFS。对于树中的每个节点,我需要node.left和node.right的等效值。这似乎没有父节点和子节点的概念。例如,
列表(nx.dfs\u preorder\u节点(T,source=1,depth\u limit=1))
给出了
[1,0,3,4]
@Anush在您的示例中,它给出了父节点的所有子节点。哦,我明白了,它需要1作为根节点。那么我不知道如何使用它来实现DFS。我需要树中每个节点的node.left和node.right的等效值。