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.mzph.cn/web/70219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RESTful 的特点与普通 Web API 的区别

RESTful 是一种设计风格,而不仅仅是普通的 Web API。它遵循一些特定的原则和约束,使得 API 更加简洁、可扩展和易于理解。以下是 RESTful 的特点,以及与普通 Web API 的区别: RESTful 的特点 1. 资源导向 RESTful API 的核心是资…

结构风荷载理论与Matlab计算

结构风荷载理论与matlab计算的实例程序,适合初学者理解matlab风荷载计算 资源文件列表 程序_结构风荷载理论与Matlab计算/chapter1/exam_simWind_1_1.m , 1035 程序_结构风荷载理论与Matlab计算/chapter1/Extrmv.m , 303 程序_结构风荷载理论与Matlab计算/chapter1…

numpy(02 数据类型和数据类型转换)

numpy(01 入门) 目录 一、Python NumPy 数据类型 1.1 NumPy 基本类型 1.2 数据类型对象 (dtype) 1.3 具体实例 二、Numpy数据类型转换 2.1 浮点数据转换 2.2 整型数据转换 2.3 浮点数转整数 一、Python NumPy 数据类型 1.1 NumPy 基本类型 下表列举了常用 NumPy 基…

【雅思博客04】Silence please!

A: Those people in front of us are making so much noise. It’s so inconsiderate! B: Don’t worry about it; it’s not such a big deal. A: Oh... I can’t hear a thing! Excuse me, can you keep it down? C: Sure, sorry about that! A: Someone’s phone is ri…

【大语言模型_3】ollama本地加载deepseek模型后回答混乱问题解决

背景: 本地下载了DeepSeek-R1-Distill-Qwen-7B模型后,通过ollama create DeepSeek-R1-Distill-Qwen-7B -f ds7b.mf加载模型启动后回答混乱,无法使用。 解决方法 重新下载模型,选择了DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf 重…

nginx ngx_http_module(9) 指令详解

nginx ngx_http_module(9) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_uwsgi_module:uWSGI支持模块,允许Nginx与uWSGI服务器进行通信。uWSGI是一种应用服务器协议,广泛用于Python Web应用的部署。通过该…

用PyInstaller构建动态脚本执行器:嵌入式Python解释器与模块打包 - 简明教程

技术场景: 需分发的Python工具要求终端用户可动态修改执行逻辑将Python环境与指定库(如NumPy/Pandas)嵌入可执行文件实现"一次打包,动态扩展"的轻量化解决方案。 ▌ 架构设计原理 1. 双模运行时识别 # 核心判断逻辑…

山石网科×阿里云通义灵码,开启研发“AI智造”新时代

近日,山石网科正式宣布全面接入阿里云通义灵码企业专属版,这标志着山石网科在研发智能化、自动化领域迈出重要一步,为研发工作注入强大的AI动力,实现多维度的效率飞跃。 此次合作,阿里云通义灵码依托强大的AI能力&…

《被讨厌的勇气》(六)

1.自由就是被别人讨厌。 2.毫不在意别人的评价、不害怕被别人讨厌、不追求被他人认可,如果不付出以上这些代价,那就无法贯彻自己的生活方式,也就是不能获得自由。 3.在意你的脸的只有你自己。 4.不去干涉别人的课题也不让别人干涉自己的课题.…

使用 PyTorch 实现标准卷积神经网络(CNN)

卷积神经网络(CNN)是深度学习中的重要组成部分,广泛应用于图像处理、语音识别、视频分析等任务。在这篇博客中,我们将使用 PyTorch 实现一个标准的卷积神经网络(CNN),并介绍各个部分的作用。 什…

SpringBoot2.0整合Redis(Lettuce版本)

前言: 目前java操作redis的客户端有jedis跟Lettuce。在springboot1.x系列中,其中使用的是jedis, 但是到了springboot2.x其中使用的是Lettuce。 因为我们的版本是springboot2.x系列,所以今天使用的是Lettuce。关于jedis跟lettuce的区别&#…

qt + opengl 给立方体增加阴影

在前几篇文章里面学会了通过opengl实现一个立方体,那么这篇我们来学习光照。 风氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子: 1 环境光照(Ambient …

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?

简介:在人工智能飞速发展的今天,大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作,还是科研辅助、代码生成,大模型的身影无处不在。然而,面对市场上琳琅满目的工具,如何挑选最适合自己的那…

stream流常用方法

1.reduce 在Java中,可以使用Stream API的reduce方法来计算一个整数列表的乘积。reduce方法是一种累积操作,它可以将流中的元素组合起来,返回单个结果。对于计算乘积,你需要提供一个初始值(通常是1,因为乘法…

pgAdmin4在mac m1上面简单使用(Docker)

问题 想要在本地简单了解一下pgAdmin4一些简单功能。故需要在本机先安装看一看。 安装步骤 拉取docker镜像 docker pull dpage/pgadmin4直接简单运行pgAdmin4 docker run --name pgAdmin4 -p 5050:80 \-e "PGADMIN_DEFAULT_EMAILuserdomain.com" \-e "PGAD…

ubuntu下安装TFTP服务器

在 Ubuntu 系统下安装和配置 TFTP(Trivial File Transfer Protocol)服务器可以按照以下步骤进行: 1. 安装 TFTP 服务器软件包 TFTP 服务器通常使用 tftpd-hpa 软件包,你可以使用以下命令进行安装: sudo apt update …

Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网

| 线上研讨会时间:2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括:是否只需集成单一的工…

vscode创建java web项目

一.项目部署 1.shiftctrlp,选择java项目 2.选择maven create from arcetype 3.选择webapp 4.目录结构如下,其中index.jsp是首页 5.找到左下角的servers,添加tomcat服务器 选择 再选择: 找到你下载的tomcat 的bin目录的上一级目录&#x…

C语言指针学习笔记

1. 指针的定义 指针(Pointer)是存储变量地址的变量。在C语言中,指针是一种非常重要的数据类型,通过指针可以直接访问和操作内存。 2. 指针的声明与初始化 2.1 指针声明 指针变量的声明格式为:数据类型 *指针变量名…

DeepSeek R1生成图片总结2(虽然本身是不能直接生成图片,但是可以想办法利用别的工具一起实现)

DeepSeek官网 目前阶段,DeepSeek R1是不能直接生成图片的,但可以通过优化文本后转换为SVG或HTML代码,再保存为图片。另外,Janus-Pro是DeepSeek的多模态模型,支持文生图,但需要本地部署或者使用第三方工具。…