目录
一、题目
1、LeetCode104:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
2、LeetCode111:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
二、示例
1、LeetCode104:
给定二叉树 [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7返回它的最大深度 3.
2、LeetCode111:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
三、思路
1、LeetCode104:先序遍历,每次递归,均返回最大深度。
2、LeetCode111:先序遍历,每次递归,均返回最小深度。
四、代码
1、LeetCode104:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def maxDepth(self, root: TreeNode) -> int:
"""
:rtype: int
"""
def DFS(root):
if root is None:
return 0
if root.left is not None and root.right is None:
return 1 + DFS(root.left)
if root.right is not None and root.left is None:
return 1 + DFS(root.right)
return 1 + max(DFS(root.left), DFS(root.right))
return DFS(root)
if __name__ == '__main__':
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)
s = Solution()
ans = s.maxDepth(root)
print(ans)
2、LeetCode111:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
def DFS(root):
if root is None:
return 0
if root.left is not None and root.right is None:
return 1 + DFS(root.left)
if root.right is not None and root.left is None:
return 1 + DFS(root.right)
return 1 + min(DFS(root.left), DFS(root.right))
return DFS(root)
if __name__ == '__main__':
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)
s = Solution()
ans = s.minDepth(root)
print(ans)