LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!

  • 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
    在这里插入图片描述

  • 导航

    • LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
    • 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
    • python源码解读:解读python的源代码与调用关系,快速提升代码质量
    • python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
    • 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识

期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️

题目描述

给定一个二叉树,找出其最大深度。

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

示例:

给定二叉树 [3,9,20,null,null,15,7]

    3/ \9  20/  \15   7

最大深度是 3。

方法一:递归

解题步骤

  1. 如果节点为空,返回深度 0。
  2. 递归计算左子树的最大深度。
  3. 递归计算右子树的最大深度。
  4. 返回左右子树深度的最大值加一(当前节点的深度)。

Python 示例

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef maxDepth(root):if not root:return 0return 1 + max(maxDepth(root.left), maxDepth(root.right))

算法分析

  • 时间复杂度:O(N),其中 N 为树的节点数,每个节点访问一次。
  • 空间复杂度:O(H),其中 H 为树的高度,因为递归栈的深度由树的高度决定。

算法图解与说明

  3            <-- Level 1/ \
9  20          <-- Level 2/  \15   7        <-- Level 3调用栈情况(以节点3为例):
maxDepth(3)
=> maxDepth(9), maxDepth(20)=> maxDepth(null), maxDepth(null), maxDepth(15), maxDepth(7)

方法二:迭代(使用栈)

解题步骤

  1. 使用栈来模拟递归过程,每个元素为节点及其当前深度。
  2. 初始化栈包含根节点和深度 1。
  3. 当栈不为空,弹出节点并更新最大深度。
  4. 将节点的左右子节点及其深度压入栈中。

Python 示例

def maxDepthIterative(root):if not root:return 0stack = [(root, 1)]max_depth = 0while stack:node, depth = stack.pop()if node:max_depth = max(max_depth, depth)stack.append((node.left, depth + 1))stack.append((node.right, depth + 1))return max_depth

算法分析

  • 时间复杂度:O(N)
  • 空间复杂度:O(N)

算法图解与说明

栈的操作示例:
初始: [(3, 1)]
操作: 弹出(3, 1), 压入(9, 2), 压入(20, 2)
接着: 弹出(20, 2), 压入(15, 3), 压入(7, 3)
接着: 弹出(7, 3), 弹出(15, 3), 弹出(9, 2)

方法三:层序遍历(使用队列)

解题步骤

  1. 使用队列实现层序遍历。
  2. 每遍历完一层,深度加一。

Python 示例

from collections import dequedef maxDepthUsingBFS(root):if not root:return 0queue = deque([root])depth = 0while queue:for _ in range(len(queue)):node = queue.popleft()if node.left:queue.append(node.left)if node.right:queue.append(node.right)depth += 1return depth

算法分析

  • 时间复杂度:O(N)

  • 空间复杂度:O(N)

算法图解与说明

队列操作示例:
初始: [3]
操作: 弹出3, 压入9, 压入20
接着: 弹出9, 弹出20, 压入15, 压入7
接着: 弹出15, 弹出7

方法四:尾递归优化

解题步骤

  1. 使用尾递归形式来优化递归的性能。
  2. 传递当前深度作为参数,避免额外的递归开销。

Python 示例

def maxDepthTailRecursive(root, depth=0):if not root:return depthreturn max(maxDepthTailRecursive(root.left, depth + 1), maxDepthTailRecursive(root.right, depth + 1))

算法分析

  • 时间复杂度:O(N)
  • 空间复杂度:O(H),利用尾递归优化,Python 中不一定有效,取决于解释器是否优化尾调用。

算法图解与说明

递归调用栈(尾递归):
maxDepthTailRecursive(3, 0)
=> maxDepthTailRecursive(9, 1), maxDepthTailRecursive(20, 1)=> maxDepthTailRecursive(null, 2), ...

方法五:分治法

解题步骤

  1. 对每个节点,分别求解左右子树的最大深度。
  2. 合并左右子树深度的结果,取最大值加一。

Python 示例

def maxDepthDivideAndConquer(root):if not root:return 0left_depth = maxDepthDivideAndConquer(root.left)right_depth = maxDepthDivideAndConquer(root.right)return 1 + max(left_depth, right_depth)

算法分析

  • 时间复杂度:O(N)
  • 空间复杂度:O(H)

算法图解与说明

分治递归过程:
maxDepthDivideAndConquer(3)
=> maxDepthDivideAndConquer(9), maxDepthDivideAndConquer(20)=> maxDepthDivideAndConquer(null), maxDepthDivideAndConquer(null), ...

应用示例

上述各方法均适用于任何形式的二叉树结构,可以有效解决实际问题中的深度计算问题。

🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)

❤️❤️作者知识有限,如有错误,请各位大佬评论区批评指正,不胜感激❥(^_-)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11233.shtml

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

相关文章

EPICS database练习

给定一个以下的数据库&#xff1a; # 指定Limit的上限&#xff0c;初始为10&#xff0c;可以通过通道访问进行设置&#xff0c;上限为100 record(ao, "$(P)Limit") { field(DRVH, "100") field(DOL, "10") field(PINI, "YES") }# 一个…

el-menu 保持展开点击不收缩 默认选择第一个菜单

<el-menu:default-openeds"[/system]" 数组 默认展开第一个:collapse"isCollapse"close"handleClose" 点击关闭的时候 让菜单打开 就可以实现保持展开效果ref"menus":unique-opened"true":active-text-color"se…

2024中国(重庆)人工智能展览会8月举办

2024中国(重庆)人工智能展览会8月举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 【报名I59交易会 2351交易会 9466】 展会背景&#xff1a; 2024中国航空科普大会暨第八届全国青少年无人机大赛在…

QT 项目打包(为了后期远程实验用)

一、环境准备 1、一个项目工程 二、步骤 1、将编译器设置调整为Release模式 二、对项目重新编译构建 三、可以看到工程目录这个文件夹 打开工程目录文件夹的Release文件夹&#xff0c;我的路径如下 四、新建一个文件夹&#xff0c;将上述路径文件夹下的exe文件复制到新的文…

Windows的消息过程调用与窗口位于同一个线程

消息过程函数和窗口通常在同一个线程中运行。 在Windows中&#xff0c;每个窗口都有一个与之相关联的线程&#xff0c;这个线程负责处理窗口的消息。当窗口接收到消息时&#xff0c;系统会将消息发送给创建窗口的线程&#xff0c;并在该线程上调用窗口过程函数来处理消息。 这…

领导跳槽邀请,测试员该如何抉择?

在职场中&#xff0c;领导跳槽并邀请下属一同前往新公司&#xff0c;是一个既常见又令人纠结的选择。对于测试员来说&#xff0c;这个决定更是充满了未知与风险。那么&#xff0c;面对这样的机会&#xff0c;我们该如何权衡利弊&#xff0c;做出明智的选择呢&#xff1f; 首先&…

你眼中的IT行业现状与未来趋势

一&#xff1a;阐述 现在IT、科技行业从业人员开始求稳&#xff0c;部分从业人员开始转向DBA、运维&#xff08;企业相当稳定&#xff09;、硬件工程师等&#xff08;技术过硬&#xff0c;不是随便可以转的&#xff09;&#xff0c;但是这些行业职位少&#xff0c;薪水相对不是…

LLM大语言模型(十四):LangChain中Tool的不同定义方式,对prompt的影响

背景 ChatGLM3-6B的函数调用功能&#xff0c;和LangChain的Tool调用&#xff0c;在prompt上并没有对齐。 参考&#xff1a;LLM大语言模型&#xff08;十二&#xff09;&#xff1a;关于ChatGLM3-6B不兼容Langchain 的Function Call_error: valueerror: caught exception: unk…

神卓互联内网穿透之快速创建https类型通道【最新】

神卓互联最近上线了V9.0内网穿透通信传输模式&#xff0c;相比与之前的V8.0在速度和延迟方面确实提升了很多&#xff0c;控制台也进行了改版升级&#xff0c;这里是对升级后的控制台创建https通道方法进行记录&#xff1a; 登录神卓互联控制台 选择【内网穿透】-【映射管理】…

如何利用AI提高内容生产效率与AIGC典型案例分析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

有趣的css - 打字机动画效果

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是使用 css 实现好玩的单行打字机效果&#xff0c;和我一起看看吧。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整…

centos7同步银河麒麟服务器SP系列外网yum源包同步不完整问题

centos7同步银河麒麟服务器SP系列外网yum源包同步不完整问题 一 问题描述二 解决方法三 外网源配置步骤 一 问题描述 Red 7.7 x86架构同步银河麒麟服务器SP arm架构外网源的yum包不完整问题&#xff0c;yum repolist查看源里面有15000左右的包&#xff0c;使用reposync命令同步…

疾病防范:拯救微笑,关于儿童抑郁的注意事项

引言&#xff1a; 儿童抑郁是一种常见但常被忽视的心理健康问题&#xff0c;对孩子的身心健康和成长都会造成严重影响。本文将探讨儿童抑郁的注意事项&#xff0c;以帮助家长和教育者更好地识别、理解和应对儿童抑郁问题。 1. 深入了解抑郁症&#xff1a; 抑郁症并非一种偶发的…

B端设计与C端设计,用户模型区别!

B端设计和C端设计到底有哪些不同&#xff1f;这篇文章里&#xff0c;作者就做了相对详细的阐述和分析&#xff0c;不妨来看一下。 C 全称是 Customer 即消费者&#xff08;泛指用户&#xff09;的产品&#xff0c;个人用户或终端用户&#xff0c;使用的是客户端。例如&#xff…

羊大师解析,如何遵守《节约用水条例》

羊大师解析&#xff0c;如何遵守《节约用水条例》 《节约用水条例》的实施旨在倡导和推动全社会形成节约用水的良好风尚&#xff0c;以应对日益严峻的水资源短缺问题。羊大师发现随着这一条例的深入实施&#xff0c;越来越多的人开始意识到节约用水的重要性&#xff0c;并积极…

Redis—图文详解高可用原因

本文不会讲解Redis的用途&#xff0c;关于用途会发另一片文章讲解&#xff0c;本文主要讲的是高可用的原理。 Redis高可用主要有以下三个原因&#xff1a;主从模式(上一篇讲Kafka的文章里有涉及到)&#xff0c;哨兵模式&#xff0c;Redis-Cluster(Redis集群)。 什么是主从模式…

第二证券|北交所股票散户可以买吗?门槛多少?

北交所股票散户能够买&#xff0c;不过一般来说&#xff0c;北交所股票出资风险比较大&#xff0c;不适合资金实力不雄厚的散户。 北交所买卖权限注册条件&#xff1a;请求注册权限前20个买卖日的证券账户和资金账户内的财物日均不低于50万元&#xff0c;其间不包括经过融资融…

基于Springboot的村庄果园预售系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的村庄果园预售系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

VR030AA080V01V02比例减压阀控制器

MAGNET-SCHULTZ比例阀是一种用于液压控制系统的装置&#xff0c;它能够根据输入信号自动调节输出的比例&#xff0c;常应用于流量、压力和温度等参数的控制。机械制造业中BEUEC比例放大器用于确保机械操作的精准度和重复性。MAGNET-SCHULTZ比例阀VR030AA080V01V01、VR030AA080V…

聚观早报 | 比亚迪海狮07 EV上市;苹果将升级Siri

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 5月13日消息 比亚迪海狮07 EV上市 苹果将升级Siri OpenAI开发全新技术 沃尔沃EX30车型将上市 SpaceX计划新建发…