网上的答案写法参差不齐,最大、最小深度写法不一。其实可以找到一个统一的写法解决最大、最小深度问题。九章官方给出lintcode和leetcode的解法有点繁琐(也可能是我菜,没看出其中的奥妙),两个else的内容有点多余,。下面给出两个问题的统一写法。
主体思想三种情况分别讨论:
当root为空时,返回深度0.
当root.left为空时,就在root.right继续深度查找
当root.right为空时,就在root.left继续深度查找
最后返回,root.left 和root.right的深度最大的值+1。
- 二叉树最大深度:
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
"""
@param root: The root of binary tree.
@return: An integer
"""
def maxDepth(self, root):
if root is None:
return 0
if root.left == None:
return self.maxDepth(root.right) + 1
if root.right == None:
return self.maxDepth(root.left) + 1
return max(self.maxDepth(root.left), self.maxDepth(root.right))+1
- 二叉树最小深度:
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
"""
@param: root: The root of binary tree
@return: An integer
"""
def minDepth(self, root):
# write your code here
if root is None:
return 0
if root.left == None:
return self.minDepth(root.right) + 1
if root.right == None:
return self.minDepth(root.left) + 1
return min(self.minDepth(root.left),self.minDepth(root.right))+1