繁体   English   中英

当树的一侧为空时,查找二叉树的最小深度解决方案不起作用

[英]Find minimum depth of binary tree solution does not work when one side of tree is null

我试图理解为什么当树的一侧为None时,寻找二叉树最小深度的解决方案不起作用。

这里已经有一个问题要问- 为什么我的解决方案无法找到二叉树的最小深度? 但是那里的答案仍然无法使我理解。

我的实现代码如下。

class Solution:
    def minDepth(self, root: 'TreeNode') -> 'int':
        if root is None:
            return 0

        left = self.minDepth(root.left)
        right = self.minDepth(root.right)

        min_depth = min(left, right)

        return 1 + min_depth

将最后一行修改为以下内容后,它将起作用。

    if left == 0 or right == 0:
        return 1 + left + right

    return 1 + min_depth

我的问题是,为什么您需要检查一侧是否为None或最后是否将它们全部加起来- return 1 + left + right

测试用例是

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

# [1, 2]
root = TreeNode(1)
root.left = TreeNode(2)

solution = Solution()
solution.minDepth(root)

我的代码返回1 ,应该返回2

编辑树的深度定义为从树的根到叶节点的最短路径中的节点数。

当您在只有一个孩子的节点上时,则在您的第一个代码版本中,该节点的min_depth将为0(因为其中一个递归调用将返回0)。

这确实是错误的,因为该节点不是叶子。 仅当节点为叶子(无子代)时才是正确的。

在您的示例中,根就是这样一个节点(有一个孩子)。 这是发生了什么:

  • minDepth(root)被称为
  • .... minDepth(root.left)被调用
  • ........ minDepth(root.left.left) is called and returns 0, because it is None。
  • ........ minDepth(root.left.right) is called and returns 0, because it is None。
  • ........ min_depth = min(left, right)值为0
  • ........ minDepth(root.left)的返回值为1
  • .... minDepth(root.right)被调用并返回0,因为它是None
  • .... min_depth = min(left, right)值为0,这是错误的。
  • ....因此,最终的返回值为1(错误)。

当您处于leftright为0的情况下,您需要获取剩余孩子的minDepth并将其添加1。 这就是为什么当您添加以下内容时它会起作用:

if left == 0 or right == 0:
    return 1 + left + right

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM