Python 计算树的所有子树

Python 计算树的所有子树,python,algorithm,graph,tree,dynamic-programming,Python,Algorithm,Graph,Tree,Dynamic Programming,我需要一个算法(或pythoncode)来获取树的所有子树。我不会为您提供代码,因为这看起来像是家庭作业,但我可以告诉您可以做什么。您可以创建一个以树的根和空列表为参数的方法,然后按顺序遍历整个树,将根节点的每个分支子树(即它们有子节点)追加到列表中 然后可以遍历列表并打印出其中的每一个子树(基本上,按顺序遍历列表中的每一个子树,打印出它们的每一个节点) 编辑:用自然语言解释的代码如下 InOrder(node, list): if node is null, then exit

我需要一个算法(或
python
code)来获取树的所有子树。

我不会为您提供代码,因为这看起来像是家庭作业,但我可以告诉您可以做什么。您可以创建一个以树的根和空列表为参数的方法,然后按顺序遍历整个树,将根节点的每个分支子树(即它们有子节点)追加到列表中

然后可以遍历列表并打印出其中的每一个子树(基本上,按顺序遍历列表中的每一个子树,打印出它们的每一个节点)

编辑:用自然语言解释的代码如下

InOrder(node, list):
    if node is null, then exit
    Traverse the left subtree (InOrder with left node)
    # I don't think there's any point in appending leaf nodes
    # to the list, since they are technically subtrees but they don't have any children
    # You could do a simple check before appending them.
    if the node is not a leaf, append it to the list
    Traverse the right subtree (InOrder with right node)

您应该能够自己用python编写此代码。

没有尝试吗?有研究吗?密码?具体问题?该输入的预期输出是什么?为什么示例树中的5个节点中只有4个具有
type
属性?@trincot:不幸的是,我没有找到解决此问题的任何代码或算法。我希望有一个子树列表。类型只是一个与问题无关的数据。@trincot:我的尝试没有成功。这个问题很复杂,我不能用递归算法来处理。这个方法不能生成所有的子树。像DFS这样的遍历不会找到所有子树。在遍历过程中,我们可以省略一些边以获得更多子树。此外,这不是家庭作业!如果这不是家庭作业,也许你可以提供你自己的解决方案,让人们相信不是这样的。此外,我从未说过应该使用DFS遍历树。我说您应该使用顺序遍历,它保证遍历树的每个节点(扩展来说,遍历树的每个子树,因为每个节点也是子树)。您需要证明您尝试了解决方案,不是对我,而是对其他用户。这有助于提高问题的质量,因为您需要什么还不清楚(我仍然不知道为什么您的预期输出是JSON格式的,因为您还没有解释原因)。至于我建议的解决方案,它不是“车”。它只是简单地使用遍历一棵树的原则之一,保证遍历每一个子树。也许如果你能指出为什么这个解决方案对你不起作用,我可以建议另一个。个人接受批评也没有真正的帮助。我认为你关注的是提问,而不是问题!回答者应该专注于改善社区和贡献!顺便说一句,
A->[B,C]B->[D]C->[E]
。您的方法如何获得
C->E
?依次探索根节点的左子树、节点本身和右子树。由于它是一种递归方法,因此树的每个子树也以相同的方式进行探索。子树中可能最深的节点是叶子,这意味着,在您的例子中,D和E将是最后探索的节点。整个遍历过程如下:
B->D->A->C->E
。你可以了解更多