Java 使用jgrapht在forset中拆分树

Java 使用jgrapht在forset中拆分树,java,tree,jgrapht,Java,Tree,Jgrapht,我有一个用库jgrapht表示的树,有各种类型的节点,我需要从特定的节点类型开始切割任何子树 正如您在本例中所看到的,此树表示Java类的源代码。我需要通过拆分从每个入口节点类型开始的主树来创建多个jgrapht对象。总的来说,我应该从这棵大树上得到7棵树。我使用的结构是DirectedPseudograph。虽然我不是100%清楚您想要什么,但似乎有各种解决方法 从根节点的每个传出邻居开始,可以运行深度优先搜索并记录返回的节点。DFS算法可到达的节点属于同一子树。为此,您可以使用 您可以创建一

我有一个用库jgrapht表示的树,有各种类型的节点,我需要从特定的节点类型开始切割任何子树


正如您在本例中所看到的,此树表示Java类的源代码。我需要通过拆分从每个入口节点类型开始的主树来创建多个jgrapht对象。总的来说,我应该从这棵大树上得到7棵树。我使用的结构是DirectedPseudograph。

虽然我不是100%清楚您想要什么,但似乎有各种解决方法

从根节点的每个传出邻居开始,可以运行深度优先搜索并记录返回的节点。DFS算法可到达的节点属于同一子树。为此,您可以使用 您可以创建一个没有根节点的子图,例如通过使用类。然后可以在生成的诱导子图上调用。由于每个子树都是一个断开连接的图形组件,因此连接性检查器将能够找到这些组件中的每一个。
顺便说一句,除非您需要伪图的功能,否则为了提高性能,最好使用SimpleDirectedGraph。显然,后者不允许平行边或自循环。

我不太清楚您的意思,我需要从特定节点类型开始剪切任何子树。谢谢!我已经尝试过DFS解决方案,我也会尝试第二个。。您认为哪种解决方案在复杂性方面更好?是的,我需要伪图,因为它代表一个Java源代码。虽然是边缘的,但我猜DFS方法是最快的。但这很难回答,因为我不知道你到底想完成什么。第二种方法在概念上非常简洁,只需几行代码即可完成。最终,第二种方法使用与DFS方法类似的迭代器。您对DFS解决方案不满意有什么原因吗?