【二叉树的最大深度】带你理解递归奥妙!

🚀个人主页:一颗小谷粒

🚀所属专栏:力扣刷题

很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

目录

💥1.1 题目要求 

​💥1.2 算法思路

💥1.3 图解分析 

💥1.4 Java代码实现

💥1.5 复杂度分析

💥1.6 递归与栈溢出


💥1.1 题目要求 

leetcode.104 二叉树的最大深度 是一道典型的通过递归来完成的题目:

104. 二叉树的最大深度 - 力扣(LeetCode)

这道题目非常简单,大家可以先看看目录1.4 的代码实现。但是递归的含义你真的理解吗?计算机是怎么执行递归的?为什么这样写就可以算出正确答案?

接下来我以此题为例,逐步分析递归的过程:

​💥1.2 算法思路

递归的概念:

递归算法分为两大阶段 : 递和归,即就是有去(递去)有回(归来)。

  • 递去:将递归问题分解为若干个规模较小, 与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。
  • 归来:当你将问题不断缩小规模递去的时候, 必须有一个明确的结束递去的临界点(递归出口),一旦达到这个临界点即就从该点原路返回到原点,最终问题得到解决。

递归的要素:

  • 递归终止的条件
  • 递归操作

简单来说递归就是函数自己调用自己,我们需要把我们的计算结果返给它的上一级问题,而它的上一级问题又会把计算结果返给上上一级问题。

数学归纳法:

递归其实就是数学归纳法的思想

💥1.3 图解分析 

不要一开始就陷入细节,我们的问题是有嵌套关系的。

本题中我们的递归终止条件就是空结点,遇到空结点就将结果返回给上一级,直到归到最初始的程序,也就是结点为3的时候。

💥1.4 Java代码实现

    public int maxDepth(TreeNode root) {if(root==null){return 0;}int leftDepth = maxDepth(root.left);int rightDepth = maxDepth(root.right);return Math.max(leftDepth, rightDepth)+1;}

或许到这里,有些小伙伴还是不理解这个程序的执行过程,那么可以参考下图结合代码再次分析,相信你会恍然大悟的: 

一层一层递,最后一层一层归上去,返回的就是左右子树的深度了。 

💥1.5 复杂度分析

  • 时间复杂度:O(n),其中 n 为二叉树的节点个数。
  • 空间复杂度:O(n)。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。

💥1.6 递归与栈溢出

递归的优点是可以使代码简洁、直观,尤其适用于处理具有重复子结构的问题,比如树和图的遍历等。但是,如果递归调用过深(例如没有正确设置基础情况或者处理的数据规模过大),可能会导致栈溢出错误,因为每次递归调用都会在内存中占用一定的栈空间。

递归就是系统自动帮你压栈  



屏幕前正在学习计算机的你可能正处于焦虑、迷茫、内耗的状态,但路是我们自己选择的,是自己为自己做出的决定,而对这所有的困难我们应该早就有了勇气,拿出自己的心态,拿出自己的意志,把这步走到底!因为你尝试了,即使不成功,你也迈出了一大步,请你努力 为了你自己 ! ! !

博主微信:g2279605572 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

elementui组件el-upload实现批量文件上传

el-upload组件上传文件时,每传一个文件会调一次接口,所以当上传多个文件的时候,有 n 个文件就要调 n 次接口。 刚好之前工作中遇到使用el-upload组件批量上传文件的需求,来看看怎么实现。 思路: 1.取消组件的自动上…

Springboot项目总结

1.为了调用写在其他包里面的类的方法 但是不使用new来实现调用这个类里面的方法,这个时候我们就需要将这个类注入到ioc容器里面,通过ioc容器来实现自动生成一个对象。 对ioc容器的理解:自动将一个对象实现new. 考察了and 和 or组合使用&…

[docker]入门

本文章主要讲述的是,docker基本实现原理,docker概念的解释,docker的使用场景以及docker打包与部署的应用。 文章中docker所运行的系统:CentOS Linux release 7.9.2009 (Core) 目录 docker是什么,什么时候需要去使用 …

房产销售系统:SpringBoot技术优势分析

第三章 系统分析 3.1 系统设计目标 房产销售系统主要是为了用户方便对房源信息管理、房源类型管理、房子户型管理、交易订单管理、预约看房管理、评价管理等信息进行查询,也是为了更好的让管理员进行更好存储所有数据信息及快速方便的检索功能,对系统的各…

5.安卓逆向-java面向对象

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 上一个内容:4.安卓逆向-常用数据结构java语言中的集合 之前的内容写了java语言常用的数据结构&#xff08…

OpenAI o1:AI领域的“草莓”革命,华人科学家贡献卓越

最近,科技界的热门明星“草莓”频繁出现在大家的视线中。9月11号,The Information报道称:OpenAI计划在未来两周内推出一款更智能、更昂贵、更谨慎的AI模型!网友们对此消息持怀疑态度,认为类似消息屡见不鲜,…

创新数字生态:智慧园区的益处与影响

智慧园区是一种利用先进信息技术、智能设备和数据分析手段来提升管理效率、改善居住体验、节约资源以及推动可持续发展的新型城市发展模式。其好处和影响不仅局限于提高工作效率,还涉及社会、生态、经济等多个方面的积极影响。 好处 智能化管理优势: 智慧园区能够实…

mac上Charles怎么配置,可以抓取浏览器/IDEA的接口

一、抓取浏览器接口 1、下载安装Charles后,按下图操作安装证书,mac撒好难过要把证书调整为可信任 2、打开macOS代理 方式一:指点开启这里 方式二:进入代理配置中开启,结果和方式一一样的 3、这时就可以抓取到浏览器…

编写注册接口与登录认证

编写注册接口 在UserController添加方法 PostMapping("/login")public Result login(Pattern(regexp "^\\S{5,16}$") String username,Pattern(regexp "^\\S{5,16}$") String password){ // 根据用户名查询用户User loginUser userS…

8个前端库-小且美

前提:前端有很多小而美的库,接入成本很低又能满足日常开发需求,同时无论是 npm 方式引入还是直接复制到本地使用都可以。 1.radash radash相比与 lodash,更加面向现代,提供更多新功能(tryit,…

系统架构设计师教程 第5章 5.2需求工程 笔记

5.2 需求工程 ★★★★★ 软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 软件需求包括3个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求)。 (1)业务需求 (business requirement) 反映了组织机构或客户对系统、产品高层次的目标…

哪款宠物空气净化器是除浮毛王者?希喂、范罗士、霍尼韦尔宠物空气净化器实测

养宠人绕不过的痛——掉毛!脱毛!又到了掉毛季,就连空气中都有毛毛……不管遇到谁,都知道你养猫养狗了——只因T恤变身毛线衫、毛毛怎么都粘不干净。不止是衣服上,地板上、沙发上、桌面上,哪哪都是毛。开始养…

[产品管理-15]:NPDP新产品开发 - 13 - 产品创新流程 - 具体产品的创新流程:精益生产与敏捷开发

目录 前言:​ 一、集成产品开发IPD模型——集成跨功能团队的产品开发 1.1 概述 1、IPD模型的核心思想 2、IPD模型的主要组成部分 3、IPD模型的实施步骤 4、IPD模型的优点 1.2 基于IPD系统的组织实践等级 1.3 IPD的优缺点 二、瀑布开发模型 1、定义与特点…

物体识别之微特征识别任务综述

“深度人工智能”是成都深度智谷科技旗下的人工智能教育机构订阅号,主要分享人工智能的基础知识、技术发展、学习经验等。此外,订阅号还为大家提供了人工智能的培训学习服务和人工智能证书的报考服务,欢迎大家前来咨询,实现自己的…

python安装换源

安装 python 使用演示的是python 3.8.5 安装完成后,如下操作打开命令行:同时按 “WindowsR” > 输入 “cmd” -> 点击确定 python换源 临时换源: #清华源 pip install markdown -i https://pypi.tuna.tsinghua.edu.cn/simple # 阿里…

个性化、持续性阅读 学生英语词汇量自然超越标准

2024年秋季新学年,根据2022版《义务教育英语课程标准》全新修订的英语新版教材开始投入使用,标志着我国英语教育迈入了一个以应用为导向、注重综合素养培养的新阶段。 新版教材的变革不仅仅是一次词汇量的简单增加,更是一场从应试到应用的深…

【鸿蒙】HarmonyOS NEXT星河入门到实战9-组件化开发进阶应用状态管理

目录 1.1 创建页面 1.2 页面跳转和后退 1.3 页面栈 1.4 路由模式 1.5 路由传参 2、生命周期 3、Stage模型 3.1 目录概览 3.2 app.json5应用配置 3.3 module.json5模型配置 3.4 UIAbility组件 3.5 UIAbility的添加和设置启动 3.6 UIAbility组件的生命周期 3.7 拉起另…

微信小程序基本信息填写要求(收藏)

小程序基本信息填写 小程序名称:小程序在发布前,名称设置成功以后有2次修改名称机会,2次机会用完,必须先发布后,才可通过微信认证进行改名。 小程序头像:新头像不允许涉及政治敏感与色情;图片格式必须为&…

使用nvm安装node版本报错

报错 windows 通过nvm安装版本,在本地安装了nvm后,通过nvm安装node报错了,报错如下图: 解决方法 1.如果你找不到相关配置文件在哪儿,可以打开vscode在终端输入nvm root,此时就会显示你的nvm配置文件路径&…

大顶堆+动态规划+二分

前言&#xff1a;我们这一题需要分类讨论 对于我们左边和右边的我们需要预处理 有点类似反悔堆的做法&#xff0c;得出i之前取出 m 个元素代价最小&#xff0c;并且这个代价一定是递减的&#xff08;可以推导一下&#xff09; 题目地址 #include<bits/stdc.h> using name…