在pydot中获取有向图的所有叶子节点

1 投票
2 回答
2972 浏览
提问于 2025-04-27 22:00

我用pydot创建了一个有向树并进行了可视化,这个没问题。但我还想获取树的叶子节点,该怎么做呢?

总的来说,我想知道如何访问存储在pydot对象里的节点和边。pydot是否提供这个功能,还是说它只是一个可视化工具?

暂无标签

2 个回答

1

当一个图形仅仅是由边组成,而没有直接指定节点时,这可能会失败

我建议按照以下步骤进行:

leafs = set(g.get_nodes())
remove = set()
for e in g.get_edges():
    remove.add(e.get_source())
    leafs.add(e.get_destination())

leafs.difference_update(remove)

这也包括孤立节点

3

简单来说,这只是一个可视化引擎。

不过,有一些功能可以用来解决你的问题:

>>> import pydot
>>> g = pydot.Dot(graph_type="digraph")
>>> g.add_node(pydot.Node(name="A"))
>>> g.add_node(pydot.Node(name="B"))
>>> g.add_node(pydot.Node(name="C"))
>>> g.add_node(pydot.Node(name="D"))
>>> g.add_edge(pydot.Edge("A","B"))
>>> g.add_edge(pydot.Edge("A","C"))
>>> g.add_edge(pydot.Edge("C","D"))
>>> g.get_nodes()
[<pydot.Node object at 0x1de1510>, <pydot.Node object at 0x1de1590>, <pydot.Node object at 0x7fb93407afd0>, <pydot.Node object at 0x1dd20d0>]
>>> leafs = {n.get_name():True for n in g.get_nodes()}
>>> for e in g.get_edge_list():
...     leafs[e.get_source()] = False
... 
>>> leafs
{'A': False, 'C': False, 'B': True, 'D': True}

这样应该能帮到你。

撰写回答