版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010712012/article/details/85220705
1.给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最大深度 3 。
2.给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最小深度 2.
思路:
1.BFS思路,地毯式扫荡,扫荡的时候看是不是叶子结点,如果是第一个到达的叶子结点,就是它的最小深度,最后一个到达的叶子结点就是最大深度。
2.DFS,先找到第一次的最大最小深度,可以先记录下来,后续继续换子节点搜索,进而更新最大最小叶子结点。
最大代码:
class Solution:
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
#要记得加上1,父节点也是一层。
return 1 + max(self.maxDepth(root.left),self.maxDepth(root.right))
最小代码:
class Solution:
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
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