1.题目描述

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

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

示例 2:

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

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100
2.解答方法

 1.可以使用递归 算法,算每个节点的左子树和右子树的深度(选择最大的),然后加上自己这一层,就可以知道最大深度

 2.使用BFS算法(广度优先搜索),对树或者图逐层遍历,就是先访问第一层,然后逐层访问

    循环遍历的时候,先弹出本节点,若有左,右子树就加入队列

递归:

# Definition for a binary tree node.

# class TreeNode:

#     def __init__(self, val=0, left=None, right=None):

#         self.val = val

#         self.left = left

#         self.right = right

class Solution:

    def maxDepth(self, root: Optional[TreeNode]) -> int:

        if not root:

            return 0

        left_depth=self.maxDepth(root.left)       //算出左子树最深

        right_depth=self.maxDepth(root.right)   //算出右子树最深

        return 1+max(left_depth,right_depth)    //最后加上root节点

BFS算法

from collections import deque

class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        
        queue = deque([root])  # 初始化队列,放入根节点
        depth = 0              # 深度计数器

        while queue:
            depth += 1                     # 即将处理新的一层
            level_size = len(queue)        # 当前层的节点数量
            
            # 只处理当前层的所有节点
            for _ in range(level_size):
                node = queue.popleft()
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
        
        return depth

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐