python - 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。但我没有得到我想要的结果,因为树结构(我猜)......
我被困住了,你能帮帮我吗?如何“将递归函数每次迭代的结果返回给变量”?谢谢
解决方案
您没有为我提供足够的代码来制作可运行和可测试的示例,但这是我对您寻求的内容的猜测:
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)
推荐阅读
- html - 从链接包装 div 中删除焦点轮廓(在 Chrome 中)
- css - 如何获得正确调整的 chrome 渲染颜色的 CSS 颜色代码?
- django - Django 使用 `method=='POST' 检查每个视图有什么好处:`
- python - PhotoImage 没有响应 tkinter Scale 小部件
- html - 有什么方法可以指定一个代码块,其中 CSS/其他代码被忽略以用于演示目的而无需使用 iframe?
- javascript - 在 Node.js 中解密文件会引发错误,但能够在 C# 中使用 Bouncy Castle 进行解密
- time-complexity - 如果 f(n) 是 O(g(n)) 并且 g(n) 是 O(h(n)) 我如何证明 f(n) + g(n) 是 O(h(n))?
- angular - Angular Universal 无法在生产服务器上运行
- applescript - 根据制表符分隔的列表从 iTunes 播放列表中删除歌曲
- python - 为什么 PyPy 认为“timeit”是不可靠的 Python 性能测量工具?