首页 > 解决方案 > python递归函数返回树中没有子节点的节点

问题描述

     0
   /   \
  1     2
 / \   /|\
3   4 5 6 7

我正在尝试使用递归函数从对象返回没有子节点(3、4、5、6、7)的节点。

它使用全局变量和此函数工作:

def find(self, nodes):
    if not hasattr(self, 'children'): 
        nodes.append(self)
    else:
        for i in self.children:
            i.find(nodes)


nodes = []
node.find(nodes) # can be any node (0,1,2,3,4, etc.)
print(nodes)

但我想在我的函数中使用 return 。我试过这样的事情:

   def find2(self):
    if not hasattr(self, 'children'): 
        return self
    else:
        for i in self.children:
            return i.find2()


nodes = root.find2()
print(nodes)

但我只有 1 个节点。我还尝试在这篇文章中传递一个数组:PYTHON Return a list from a recursive function。但我没有得到我想要的结果,因为树结构(我猜)......

我被困住了,你能帮帮我吗?如何“将递归函数每次迭代的结果返回给变量”?谢谢

标签: pythonrecursiontreereturn

解决方案


您没有为我提供足够的代码来制作可运行和可测试的示例,但这是我对您寻求的内容的猜测:

def find(self):
    if not hasattr(self, 'children'):
        return [self]

    nodes = []

    for child in self.children:
        return nodes.extend(child.find())

    return nodes

# ...

nodes = root.find()
print(nodes)

推荐阅读