java数据结构与算法刷题-----LeetCode104:二叉树的最大深度

力扣树专题-5 深度优先搜索 leetcode104 101 112 543 129 五道题小练一下深度优先遍历搜索算法 java刷题笔记 DFS深度优先搜索算法专题 持续更新中!碰到好题就扔进来! 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 思路分析

深度优先或者广度优先

  1. 代码
    在这里插入图片描述
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    /**
    深度优先O(n) */
    public int maxDepth(TreeNode root) {
        //以root为根的结点的深度 = Max(左子树深度,右子树深度)+1
        if(root == null) return 0;//如果为null,说明到底了,本层没有深度
        else {
            int i = maxDepth(root.left);//当前结点左子树深度
            int i1 = maxDepth(root.right);//当前结点右子树深度
            return Math.max(i,i1)+1;//当前结点深度,为子树深度+1
        }
    }
    /** O(n) 速度会比上面慢
        广度优先
        对于二叉树来说可以理解为横着一层层找
        对应图这种数据结构,就是先遍历和当前结点邻近的,然后依次再遍历邻居结点,临近的,依次类推
     */
     public int maxDepth1(TreeNode root) {
        //以root为根的结点的深度 = Max(左子树深度,右子树深度)+1
        if(root == null) return 0;//如果为null,说明到底了,本层没有深度
        //广度优先1. 需要一个队列
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        //广度优先2,起始结点,添加到最前面
        queue.offer(root);
        int ans = 0;
        //广度优先3,队列空,遍历完成
        while(!queue.isEmpty()){
            //广度优先4,对当前结点,进行广度遍历,size保存当前广度,不可以动态计算,因为队列大小一直变
            int size = queue.size();
            while(size>0){
                //广度优先5. 先进的先出去,相邻节点从后面进来,下一轮再遍历
                //先进先出,最前面的先出来
                TreeNode node = queue.poll();
                //对它广度优先遍历,把相关结点放入队列,先进先出,那它们就是后入后出
                if(node.left!=null) queue.offer(node.left);
                if(node.right!=null) queue.offer(node.right);
                //size--,因为最前面的广度遍历完成了
                size--;
            }
            //遍历了一层
            ans++;
        }
        return ans;
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  4. 差分数组:对差分数组求前缀和即可得到原数组
  1. 用差值,作为下标,节省空间找东西。比如1900年到2000年,就可以定义100大小的数组,每个数组元素下标的查找为1900。
  2. 前缀和数组,对于数组 [1,2,2,4],其差分数组为 [1,1,0,2],差分数组的第 ii个数即为原数组的第 i-1 个元素和第 i个元素的差值,也就是说我们对差分数组求前缀和即可得到原数组
  1. 前缀和:假设有一个数组arr[1,2,3,4]。然后创建一个前缀和数组sum,记录从开头到每个元素区间的和。第一个元素是0。第二个元素,保存第一个和sum[1] = sum[0]+arr[0],第二个元素,保存第二个和sum[2] = sum[1]+arr[1]
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
LeetCode刷题经验分享:数据结构与算法核心 本文旨在为LeetCode刷题者提供系统化的知识框架与实战经验,覆盖数据结构(数组、链表、树、图等)和算法(排序、搜索、动态规划、贪心等)的核心内容。通过深度解析典型题目,阐述如何将理论知识转化为解题策略,重点提升代码实现能力与算法优化思维。本文采用“概念解析→算法原理→实战应用→工具资源”的逻辑结构,通过理论结合代码的方式,逐步拆解LeetCode高频题型的解题思路。核心章节包括数据结构底层原理、算法复杂度分析、典型题目代码实现、实战项目案例等,帮助读者建立从问题建模到代码优化的完整思维链路。数据结构。 阅读详情

相关推荐

leetcode104(二叉树的最大深度)

数据结构课上刷的,我感觉我开始对递归这个概念开始比较清晰了。 题目如下 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 首先我实现了两种做法,都是DFS,一...

ayang818 's blog 1429

Java算法篇-LeetCode-104-二叉树的最大深度

Java算法篇-LeetCode-104-二叉树的最大深度

极客星云-优快云博客 1750

【忍者算法】深入探索:二叉树的最大深度之旅|LeetCode 104 二叉树的最大深度

在二叉树的世界里,深度代表了从根节点到最远叶子节点的最长路径。这是一种从根本到极限的探索旅程。

忍者算法的博客 836

【LeetCode - Java】104. 二叉树的最大深度 (简单)

目录1. 题目描述2. 解题思路3. 代码实现3.1 递归(深度优先搜索)3.2 迭代(广度优先搜索)3.3 对比 1. 题目描述 2. 解题思路 对于二叉树来说,递归yyds,对于本道题目而言,递归也是最简单的实现方法,即深度优先搜索,简单分析即可知道每一层的深度是孩子的最大深度加一。 太简单了有点不过瘾,想用迭代来实现一下,简单分析便可知道使用迭代必须把每一层节点的子节点存储起来,用于下一次的迭代中,突然发现,这不就是广度优先搜索的思想嘛,对于这个子节点存储用什么数据结构我们还是要考虑一下的,应该是要

Beemo的博客 722

AI驱动的数据完整性:ECC到S/4HANA迁移

在SAP ECC到S/4HANA的迁移过程中,数据完整性验证是最复杂且关键的挑战之一。本文介绍了一个全面的AI驱动的端到端数据完整性框架,用于对账事务数据并验证数百万条主数据记录和事务记录的完整性。该框架结合了模式映射、自然语言提示到SQL生成、基于LLM的解决方案、大规模数据对账的数据完整性工具、基于云的测试数据管理以及实时Power BI仪表板,为开发者提供了一个可重复、可扩展的工作流程,确保ERP迁移过程中的数据质量。

简简单单Onlinezuozuo 1174

5nm制程的CV5芯片实测:用它给无人机做8K拍摄和实时避障,功耗和性能到底怎么样?

本文深度评测了5nm制程的CV5芯片在无人机8K拍摄和实时避障中的表现。通过实测数据展示了CV5的异构计算架构、8K视频编码性能和CVflow®AI引擎的加速效果,同时提供了开发中的优化技巧和散热建议,为无人机开发者提供了实用的参考。

weixin_30861797的博客 358

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

金三银四,又到了刷题月。有时间的话,希望大家还是尽量刷起来咯。帮助往往不是直接体现出来的,但会让你对很多东西的底层实现了解的更深刻。

**My Coding Family** 1046

告别命令行恐惧!用TBtools的MCScanX插件,5分钟搞定拟南芥和水稻的基因组共线性分析

本文介绍如何利用TBtools的MCScanX插件快速完成拟南芥和水稻的基因组共线性分析,无需命令行操作,5分钟即可生成专业可视化结果。通过图形化界面简化传统MCScanX的复杂流程,特别适合非生物信息背景的研究者,显著提升基因组数据分析效率。

dianzhuique8587的博客 377

LeetCode第104题——二叉树的最大深度(Java)

二叉树的最大深度

m0_52861211的博客 215

波分复用技术原理

波分复用原理 把不同波长的光信号复用到同一根光纤中进行传送,这种方式我们把它叫做波分复用( Wavelength Division Multiplexing ) 一根光纤被划分为多个波道,多个波长以一定的间隔隔开,在光纤中独立传输。 波分复用应用演示 如果将WDM系统看作交通系统,光纤可以看作是多个车道的公用道路。 各种类型的业务就像货物一样,被打包装载到车辆中。 车辆按照分配的车道行驶至目的地,完成货物的运输。 想要提高波分复用系统的传输容量,就要增加波道数量或是提升单波传...

m0_63251770的博客 9999

unity 在透明物体上投射阴影

unity版本:2019.4.16 创建一个shader,代码如下: Shader "ChuckLee/ARShadow" { Properties { _ShadowColor("Shadow Color", Color) = (0.1, 0.1, 0.1, 0.53) } SubShader { Tags{ "RenderType" = "Transparent" "Queue" = "Geometry+1" } Blend SrcAlpha OneMinusSrcAlph

Abel02的博客 2953

LeetCode——104 二叉树的最大深度(JAVA)

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3。 思路 这题和LeetCode——111 二叉树的最小深度(JAVA)思路一致,就是DFS到叶子结点之后,数arrayList里元素的个数。 但是暂时没想到什么好的剪枝方法,时间空间开销较大。 代码 pub

一只奋斗中的本科生 206

【异常】OpenClaw 连接异常This site can‘t be reached 127.0.0.1 refused to connect Try: Checking the proxy

在访问OpenClaw相关服务时,浏览器提示如下异常信息,无法正常加载页面:Try:补充说明:该报错仅出现于本地访问场景(127.0.0.1为本地回环地址),涉及OpenClaw核心服务的本地连接交互,无外部网络及敏感信息泄露风险。

奶爸的编程之路,也就一周冷个三天 1485

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

YOLO26改进策略【Neck】| CVPR2025 LCA轻量交叉注意力 跨层级双向引导 + 分层降噪增强,提升微小目标特征表达

简单相加、拼接融合无法建立深浅层双向约束关系,浅层微小目标易被深层背景覆盖,深层全局信息难以修正浅层噪声;普通单路自注意力仅单一层内建模依赖,缺少跨层级特征互引导机制,深浅特征信息割裂;标准多头跨注意力计算量大、参数量高,轻量化单模态检测/分割网络部署困难,无法区分前景目标与背景噪声。为此设计单模态轻量化交叉注意力LCA,构建浅层细节、深层语义双分支双向引导结构,轻量完成跨层级特征交互,同步降噪并强化单模态微小目标特征。

Limiiiing的博客 523

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

WW、forever的博客 1964

LeetCode Java面试刷题笔记汇总

LeetCode Java刷题笔记汇总,按照类型刷题效率更高。

终生学习践行者 2948

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

leetcode【二叉树—简单】 104.二叉树的最大深度

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 2762

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

leetcode 104. 二叉树的最大深度

题目 思路 递归:每一次递归,返回当前节点的左孩子和右孩子的最大深度,深度用当前深度+1作为参数传递。 题解 // Definition for a binary tree node. class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } @Override public String toString() {

寒泉 6万+

leetCode104二叉树的最大深度(java实现)

leetCode104:二叉树的最大深度(java实现) 题目概述: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 题目解析: 如果二叉树为空返回0 最好用递归做,因为遍历长度不确定 除了叶子节点,每个节点都有孩子 如果只有根节点,

三少说 342

LeetCode 热题 HOT 100 Java题解——104. 二叉树的最大深度

LeetCode 热题 HOT 100 Java题解104. 二叉树的最大深度递归复杂度分析 104. 二叉树的最大深度 题目: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 递归 当前节点的深度等于左右子树深度最大值+1+1+1,空叶子节点为0

qq_20067165的博客 359

Leetcode104 二叉树的最大深度 C++,Java,Python

Leetcode104 二叉树的最大深度 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说...

Rp的博客 288

LeetCode 104 二叉树的最大深度 Java

LeetCode 104 二叉树的最大深度 Java题目描述代码 题目描述 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 来源:力扣(LeetCode) 链接:https:...

qq_29061435的博客 232

leetcode-104-二叉树的最大深度(java)

title: leetcode-104-二叉树的最大深度(java) date: 2019-09-21 16:53:32 categories: leetcode tags: leetcode leetcode-104-二叉树的最大深度(java) 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例:...

weixin_42479155的博客 593

leetcode104 二叉树的最大深度

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明:叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度3 。 思路:递归定义:深度等于左右子树中较深的那个+1. /** * Defi...

少说,多做。 2787
上一篇: java数据结构与算法刷题-----LeetCode101:对称二叉树
下一篇: java数据结构与算法刷题-----LeetCode58:最后一个单词的长度
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值