我得到了下面的递归函数来计算二叉树的最长路径。我是递归函数的新手,有人能帮我看看这个函数是如何用给定的例子导出结果=4的吗?
class Solution:
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None:
return 0
else:
lDepth = self.maxDepth(root.left)
rDepth = self.maxDepth(root.right)
if lDepth > rDepth:
return lDepth+1
else:
return rDepth+1
递归函数是一个调用自身的函数。
maxDepth
是一个绑定到树的当前节点(根)并返回其深度的函数。你知道吗在您的例子中,您正在检查根是否有左叶或/和右叶,并调用它们各自的
maxDepth
函数,每次都深入到树中一层。你知道吗一旦你到达了最底层(元素4、-4或18),你的根就没有了,这意味着你到达了树的最深处。最深元素的深度是0,因此我们有以下代码。你知道吗
现在,一旦返回这个函数,返回值就会传递给调用者,即上一个节点。这意味着(4)将把它的值返回到(3),然后返回到(2),最后返回到(5)。你知道吗
每次返回值时,我们都会在再次返回之前向其添加+1
因此(4)将返回0,(3):1,(2):2,(5):3
调用递归函数maxDepth时,会保留一个函数调用堆栈。这将一直持续到到达基本步骤(root为None)。一旦达到基本步骤,堆栈将被计算,顺序是相反的。对于每个后续的根,将调用基本步骤并返回长度。当没有更多的根可计算时,它就会结束。你知道吗
如果有疑问,可以打印相应的lDepth,rDepth,根。左,根。右. 你知道吗
对于这个问题,它将自上而下地评估值。原谅我的可怜绘图.lol你知道吗
相关问题 更多 >
编程相关推荐