NetworkX 递归子节点

Posted

技术标签:

【中文标题】NetworkX 递归子节点【英文标题】:NetworkX recursive child nodes 【发布时间】:2017-10-01 18:37:44 【问题描述】:

使用最新的 NetworkX(撰写本文时为version 1.11),检索给定节点的所有(递归)子节点的最有效方法是什么?successors() 函数检索直接子级,在以前的版本中有 dfs_preorder_nodes solution

【问题讨论】:

dfs_preorder_nodes 有什么问题? 啊,我的错!直到现在,我只能找到以前的版本。出于某种原因,认为最新版本具有类和基于类的方法。干杯! 【参考方案1】:

有一个 descendants 方法可以找到所有子节点,包括每个子节点的子节点:

1-2
 \
  3
   \
    4
import networkx as nx

G = nx.DiGraph()
G.add_edge(1, 2)
G.add_edge(1, 3)
G.add_edge(2, 4)
res = nx.descendants(G, 1)
print (res) #2,3,4

【讨论】:

【参考方案2】:

dfs_preorder_nodes 在最新版本中仍然有效,正如 Joel 指出的那样。该文档可在here 获得。

以下实现了所需的,即感兴趣节点的所有递归子节点:

import networkx as nx 
children = [node for node in nx.dfs_preorder_nodes(network, queryID)]`

【讨论】:

你也可以children = list(nx.dfs...) 把生成器变成一个列表。

以上是关于NetworkX 递归子节点的主要内容,如果未能解决你的问题,请参考以下文章

networkx图论Depth First Search深度优先搜索遍历DFS,基于递归,Python

反应递归地创建动态树

计算特定XML节点c#的子节点数[重复]

NetworkX 中的节点与边

使用默认为节点名称的节点标签绘制 networkx 图

NetworkX节点属性绘制