当前位置: 首页 > 知识库问答 >
问题:

为什么我的二叉树最大深度解返回的值比它应该返回的值小?

杨海
2023-03-14

我正在解决以下Leetcode问题:https://leetcode.com/problems/maximum-depth-of-binary-tree/solution/

返回二叉树的最大深度。

这是我的解决方案:

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        
        if not root:
            return 0

        stack = [(root, 1)]
        
        curr_depth = 1
        while stack:
            node, depth = stack.pop()
            depth = max(curr_depth,depth)
            if node.right:
                stack.append((node.right, curr_depth + 1))
            if node.left:
                stack.append((node.left, curr_depth + 1))
        
        return depth
    

由于某种原因,输出总是比预期的少一个。看看公认的解决方案,它们看起来和我的非常相似,但我似乎找不到我的解决方案出了什么问题。

共有2个答案

尉迟景福
2023-03-14

所以你的问题变量是深度和电流深度。基本上,当出现depth=max(curr\u depth,depth)时,需要将其指定给curr\u depth。然后,在向堆栈中添加要传递的depth 1notcurr_depth 1,最后要返回curr_depth和notdepthcurr_depth表示当前最大深度,depth是一个临时变量,表示所考虑节点的深度。最好是始终如一。

我不会浪费您的时间,复制并粘贴一个有效的正确算法,正如您所说,您的问题是关于您的算法失败的原因,因为您已经看到了许多有效的实现。

洪华皓
2023-03-14

这有用吗?

from typing import Optional

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        return self._visit(root, 0)
    
    def _visit(self, node: Optional[TreeNode], depth: int) -> int:
        if not node:
            return depth
        return max(self._visit(node.left, depth + 1), self._visit(node.right, depth + 1))
 类似资料:
  • 我们想写一个函数,它将二叉树的根作为输入,并使用类PairAns返回该树的最大值和最小值。 我在这个问题的基础案例中遇到了一些问题 我希望答案是正确的,但在所有测试用例中都出现了运行时错误。

  • 我正在处理LeetCode问题111。二叉树的最小深度: 给定一棵二叉树,求其最小深度。 最小深度是从根节点到最近的叶节点的最短路径上的节点数。 注意:叶是没有子节点的节点。 我使用了广度优先的算法,并试图改变它以使其与问题保持一致。但是函数返回的是。 有人能解释为什么会这样吗?

  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来

  • 初学者问题,很抱歉,如果这不是一个合适的地方,请尝试学习在中逻辑是如何工作的,我无法理解这一点 我希望它会说“是的!”如果是A、A、D或D,而是z,但出于某种原因,它会说“是的!”无论第一个符号是什么,都会断开,并且只检查第二个符号是否为z。

  • 当某个对象具有装箱类型属性时,该属性的getter返回。但是这应该返回,因为boxed type属性的默认值是。这里有什么问题?