要理解这个递归函数

2024-09-28 16:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了下面的递归函数来计算二叉树的最长路径。我是递归函数的新手,有人能帮我看看这个函数是如何用给定的例子导出结果=4的吗? enter image description here

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

Tags: 函数self路径returnifrootelseclass
3条回答

递归函数是一个调用自身的函数。maxDepth是一个绑定到树的当前节点(根)并返回其深度的函数。你知道吗

在您的例子中,您正在检查根是否有左叶或/和右叶,并调用它们各自的maxDepth函数,每次都深入到树中一层。你知道吗

一旦你到达了最底层(元素4、-4或18),你的根就没有了,这意味着你到达了树的最深处。最深元素的深度是0,因此我们有以下代码。你知道吗

 if root is None:
     return 0

现在,一旦返回这个函数,返回值就会传递给调用者,即上一个节点。这意味着(4)将把它的值返回到(3),然后返回到(2),最后返回到(5)。你知道吗

每次返回值时,我们都会在再次返回之前向其添加+1

if lDepth > rDepth:
        return lDepth+1
    else:
        return rDepth+1

因此(4)将返回0,(3):1,(2):2,(5):3

调用递归函数maxDepth时,会保留一个函数调用堆栈。这将一直持续到到达基本步骤(root为None)。一旦达到基本步骤,堆栈将被计算,顺序是相反的。对于每个后续的根,将调用基本步骤并返回长度。当没有更多的根可计算时,它就会结束。你知道吗

如果有疑问,可以打印相应的lDepth,rDepth,根。左,根。右. 你知道吗

对于这个问题,它将自上而下地评估值。原谅我的可怜绘图.lol你知道吗

enter image description here

相关问题 更多 >