[英]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,这是错误的。 当您处于left
或right
为0的情况下,您需要获取剩余孩子的minDepth
并将其添加1。 这就是为什么当您添加以下内容时它会起作用:
if left == 0 or right == 0:
return 1 + left + right
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.