(力扣每日一题)二叉树的最大深度

二叉树的最大深度

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
(力扣每日一题)二叉树的最大深度_第1张图片

解题思路
1、如果知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为 max(l,r)+1
2、左子树和右子树的最大深度又可以以同样的方式进行计算。
3、因此我们在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1)时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。
4、图示具体流程
(力扣每日一题)二叉树的最大深度_第2张图片
(力扣每日一题)二叉树的最大深度_第3张图片
(力扣每日一题)二叉树的最大深度_第4张图片
(力扣每日一题)二叉树的最大深度_第5张图片
(力扣每日一题)二叉树的最大深度_第6张图片
(力扣每日一题)二叉树的最大深度_第7张图片
(力扣每日一题)二叉树的最大深度_第8张图片
(力扣每日一题)二叉树的最大深度_第9张图片
(力扣每日一题)二叉树的最大深度_第10张图片
代码

class Solution:
    def maxDepth(self, root):
        if root is None: 
            return 0 
        else: 
            left_height = self.maxDepth(root.left) 
            right_height = self.maxDepth(root.right) 
            return max(left_height, right_height) + 1 

时间复杂度:O(n),其中 n为二叉树节点的个数。每个节点在递归中只被遍历一次。
空间复杂度:O(height),其中 height 表示二叉树的高度。

方法二深度遍历

代码

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        return max(self.maxDepth(root.left)+1,self.maxDepth(root.right)+1)

方法三 BFS(广度优先搜索)
代码

class Solution:
    def maxDepth(self, root):
        if not root:
            return 0
        queue = [(root, 1)]
        max_dep = 0
        while queue:
            node, depth = queue.pop()
            max_dep = max(max_dep, depth)
            if node.left:
                queue.append((node.left, depth +1))
            if node.right:
                queue.append((node.right, depth + 1))
        return max_dep

你可能感兴趣的:((力扣每日一题)二叉树的最大深度)