当前位置: 首页 > news >正文

python-leetcode 36.二叉树的最大深度

题目:

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

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


方法一:深度优先搜索

知道了左子树和右子树的最大深度l和r,那么该二叉树的最大深度即为:max(l,r)+1

而左子树和右子树的最大深度又可以以同样的方式进行计算。因此可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在O(1)时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def maxDepth(self, root):""":type root: Optional[TreeNode]:rtype: int"""if root is None:return 0else: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表示二叉树的高度


方法二:广度优先搜索

广度优先搜索的队列里存放的是「当前层的所有节点」。每次拓展下一层的时候,用一个变量ans来维护拓展的次数,该二叉树的最大深度即为ans。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def maxDepth(self, root):""":type root: Optional[TreeNode]:rtype: int"""if not root:return 0queue=[root] #使用一个队列(queue)来进行广度优先搜索, 初始时包含根节点 ans=0while queue: #在队列不为空时持续进行。每次循环表示遍历树的一层size=len(queue)  #获取当前队列中节点的数量,即当前层的节点数while size>0:node=queue.pop(0)if node.left:queue.append(node.left) #当前节点 node 有左子节点,就将左子节点加入队列if node.right:queue.append(node.right)#当前节点 node 有右子节点,就将右子节点加入队列size-=1  #处理完当前节点,减少层内节点计数ans+=1 #层处理完,增加深度计数器return ans

时间复杂度:O(n)每个节点只会被访问一次

空间复杂度:O(n)取决于队列存储的元素数量

源自力扣官方题解

http://www.lryc.cn/news/539612.html

相关文章:

  • MySQL事务的特性和隔离级别
  • Oracle视图(基本使用)
  • C++ Primer 类的作用域
  • 【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
  • 学习数据结构(11)二叉树(堆)下
  • HarmonyOS NEXT网络状态监听HTTP和RCP请求网络
  • MySQL数据库(4)—— 数据类型
  • 如何在Odoo 18中创建记录规则Rule
  • petalinux高版本设置自动登录和开机自启动配置
  • 操作系统2.4
  • Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例
  • 解析DrugBank数据库数据|Python
  • CUDA Toolkit 历史版本 cuda安装
  • Aseprite详细使用教程(12)——轮廓工具和多边形工具
  • macos sequoia 禁用 ctrl+enter 打开鼠标右键菜单功能
  • 分布式架构与XXL-JOB
  • leetcode day18 移除元素 26+283
  • 【HarmonyOS Next】鸿蒙监听手机按键
  • 用Deepseek查询快证API-物流查询-实名认证-企业实名认证
  • 一个简洁高效的Flask用户管理示例
  • 分布式之分布式ID
  • (萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
  • 边缘计算网关与 PLC:注塑机车间数据互联新变革
  • LeetCode刷题---哈希表---347
  • LED灯闪烁实验:实验介绍
  • 论文笔记(七十二)Reward Centering(一)
  • C#之上位机开发---------C#通信库及WPF的简单实践
  • 使用 pjsua2 开发呼叫机器人,批量拨打号码并播放固定音频
  • 从函数到神经网络
  • 用自定义注解实现Excel数据导入中的枚举值校验