104.二叉树的最大深度

发布时间 2023-10-31 18:18:10作者: Frommoon

题目

  • 给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

法一、后序遍历

  • 后序遍历+递归实现:此树的深度 等于 左子树的深度 与 右子树的深度中的 最大值+1
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if not root: return 0   #终止条件: 当 root​ 为空,说明已越过叶节点,因此返回 深度0
        return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1

法二、层序遍历

  • 每遍历一层,则计数器 +1 ,直到遍历完成,则可得到树的深度。
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root: return 0  #当 root​ 为空,直接返回 深度0 
        queue, res = [root], 0 #初始化队列(加入根节点root),计数器res=0
        while queue:#当队列不空时执行:
            tmp = []   #初始化一个空列表 tmp ,用于临时存储下一层节点。
            for node in queue:   #遍历 queue 中的各节点 node
                if node.left: tmp.append(node.left)  #左子节点加入 tmp
                if node.right: tmp.append(node.right)   #右子节点加入 tmp
            queue = tmp  #将下一层节点赋值给 queue
            res += 1  #层数加 1
        return res