【发布时间】:2020-10-24 10:46:22
【问题描述】:
为了总结任何给定二叉树中所有节点的深度,我编写了以下递归算法:
def nodeDepths(root):
final=0
helper(root,0,final)
return final
def helper(node,d,final):
if not node:
return
final+=d
helper(node.left,d+1,final)
helper(node.right,d+1,final)
class BinaryTree:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
我的想法是:当我看到每个节点时,将该节点的深度添加到最终总和中,然后递归调用左右,以便它们可以做同样的事情。在递归调用堆栈结束时,最终总和应该具有正确的值。
实际结果:最终总和为0。
为什么这不起作用?
【问题讨论】:
-
因为
helper方法没有返回任何实质性内容。你总是返回 0。 -
@pecey 这就是我打算对“final”进行修改的原因。我假设每次修改 nodeDepths() 中定义的“最终”时传递给帮助程序的“最终”变量。 helper 不会通过 ref 修改 var 'final' 吗?
-
我认为this 会帮助您理解。但简而言之,当您将变量
final传递给helper时,它不会修改nodeDepths中声明的final。为此,您必须将final设为全局变量。
标签: python recursion binary-tree