求二叉树最小深度
Day47: 题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最小深度 2.
补全下面代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
2 分析
分析过程的开始,我们先看一个错误的求解,并说明为什么它是错误的:
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
if not root.left and not root.right:
return 1
return 1 + min(self.minDepth(root.left),self.minDepth(root.right))
考虑下面二叉树:
使用以上代码返回最小深度为 1,其实最小深度为 2,因为最小深度的定义为:从根节点到最近叶子节点的最短路径上的节点数量。
为什么上面的解有问题呢?
原因在于递归基选取有问题,只考虑了下面两种情况:
-
二叉树为 None -
二叉树只有一个节点
递归基未考虑下面两种情况,所以导致出错:
3
正确的求解,需要把上面遗漏的两种递归基考虑进去:
# 递归基的下面两种情况必须考虑进去:
if not root.left:
return 1 + self.minDepth(root.right)
if not root.right:
return 1 + self.minDepth(root.left)
正确的完整代码如下:
class Solution(object):
def minDepth(self, root):
if not root:
return 0
if not root.left and not root.right:
return 1
# 递归基的下面两种情况必须考虑进去:
if not root.left:
return 1 + self.minDepth(root.right)
if not root.right:
return 1 + self.minDepth(root.left)
return 1 + min(self.minDepth(root.left),self.minDepth(root.right))
本文分享自微信公众号 - Python与算法社区(alg-channel)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4585819/blog/4415751