使用networkX的子树

4 投票
1 回答
5195 浏览
提问于 2025-04-17 04:58

在networkX中,我有一个树结构,使用的是DiGraph()。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import networkx as nx
t = nx.DiGraph()
t.add_edge(1,'r')
t.add_edge(2,'r')
t.add_edge(3,'r')
t.add_edge(4,2)
t.add_edge(5,2)
t.add_edge(6,5)
print t.edges() 

如果我选择树中的节点2,
我该如何获取节点2的子树呢?

编辑

我期待得到这个子树

[(4,2),(5,2),(6,5)]

1 个回答

13

如果你指的是以节点 2 为根的子树,那就是

from networkx.algorithms.traversal.depth_first_search import dfs_tree

subtree_at_2 = dfs_tree(t, 2)

补充说明: 看起来你在边的顺序上搞错了。在一个有方向的树里,所有的路径都是从根节点到叶子节点,而不是反过来的。使用 dfs_tree(t.reverse(), 2) 可以得到你想要的树,但记得要修改你的代码。

撰写回答