java数据结构与算法刷题-----LeetCode404. 左叶子之和

【力扣题解】P404-左叶子之和-Java题解 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路
  1. 深度优先遍历,或者广度优先
  2. 向下遍历时,如果是左边的结点,传输一个标志true
  3. 拿到结点后,如果是叶子结点,判断是否标志位时true,如果是,说明是左叶子
代码
  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 {
    public int sumOfLeftLeaves(TreeNode root) {
        return sumOfLeftLeaves(root,false,0);
    }
    public int sumOfLeftLeaves(TreeNode root,boolean isLeft, int sumLeft){
        if(root != null){
            if(root.left == null && root.right == null){//如果是叶子结点
                sumLeft = isLeft?sumLeft+root.val:sumLeft;//并且是左结点,就累加
            }
            //如果不是叶子,继续深度遍历
            sumLeft = sumOfLeftLeaves(root.left,true,sumLeft);
            sumLeft = sumOfLeftLeaves(root.right,false,sumLeft);
        }
        return sumLeft;
    }
}

写法二


class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        return root != null ? dfs(root) : 0;
    }

    public int dfs(TreeNode node) {
        int ans = 0;
        if (node.left != null) {
            ans += isLeafNode(node.left) ? node.left.val : dfs(node.left);
        }
        if (node.right != null && !isLeafNode(node.right)) {
            ans += dfs(node.right);
        }
        return ans;
    }

    public boolean isLeafNode(TreeNode node) {
        return node.left == null && node.right == null;
    }
}
  1. 广度优先
    在这里插入图片描述
class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null) {
            return 0;
        }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);//根节点入队列
        int ans = 0;
        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();//出队列结点
            if (node.left != null) {//如果它没有左子树
                if (isLeafNode(node.left)) {//看看是不是叶子结点
                    ans += node.left.val;//如果是,直接累加
                } else {//如果有左子树
                    queue.offer(node.left);//入队列
                }
            }
            if (node.right != null) {//如果右子树不为空
                if (!isLeafNode(node.right)) {//看看是不是叶子
                    queue.offer(node.right);//如果不是叶子,继续向下遍历
                }
            }
        }
        return ans;
    }

    public boolean isLeafNode(TreeNode node) {
        return node.left == null && node.right == null;
    }
}
BepInEx插件开发实战:用Visual Studio快速创建你的第一个Unity Mod(2024新版) 本文是2024年新版BepInEx插件开发实战指南,详细讲解如何使用Visual Studio快速创建你的第一个Unity Mod。内容涵盖专业开发环境搭建、插件生命周期解析、利用HarmonyX进行游戏代码注入、实现实时调试与热重载技巧,以及项目配置与打包发布全流程,助你从Mod使用者转变为创造者。 阅读详情

相关推荐

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装 1. BNC软件 1.1 软件介绍 The BKG Ntrip Client (BNC) is an Open Source multi-stream client program designed for a variety of real-time GNSS applications. It was primarily designed for receiving data streams from any Ntrip

小马甲的新马甲 7809

Java实现 LeetCode 404 左叶子之和

404. 左叶子之和 计算给定二叉树的所有左叶子之和。 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 /** * Definition for a binary tree node. * public class TreeNode { * int val; * T...

南 墙 1万+

从零开始:用ZEMAX设计双高斯照相物镜的完整流程(附55mm焦距实例)

本文详细介绍了使用ZEMAX设计双高斯照相物镜的完整流程,特别针对55mm焦距实例进行了深入解析。从初始结构选择、参数设置到优化策略和像质分析,逐步指导读者掌握这一经典光学设计方法。通过具体实例展示了如何实现卓越的像差校正,适用于35mm相机标准镜头等应用场景。

onion的博客 708

力扣热题——左叶子之和

力扣热题,让我带你进入二叉树的世界,超详细解释,新手也能学会!!!

WenJGo的博客 1253

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4545

SAP 财务接口开发:完全清账 vs 标准过账的 CO-PA(获利能力字段) 赋值全解析(含设计哲学)

用于完全清账场景:用于标准凭证过账/部分清账两者对 CO-PA 数据的传递方式截然不同。本文不仅提供完整的代码实现,更深入解析为什么 SAP 要这样设计——了解设计哲学,才能灵活应对各类需求。完全清账→ 调用,必须在T_FTPOST中传递,其他特征用BSEG-RKE_前缀。标准过账/部分清账→ 调用,在CRITERIA表中传递特征,字段名直接用WERKSARTNR等。SAP 的设计智慧面向不同场景,采用不同机制,各司其职。通过接口抽象,将复杂的 CO-PA 配置逻辑封装在内部,对外提供简洁的调用方式。

Pegasus666的博客 329

【LeetCode刷题日记】 404:左叶子之和——两种解法带你彻底搞懂二叉树左叶子之和:递归与BFS详解

本文介绍了计算二叉树所有左叶子节点之和的两种方法。通过示例分析,明确了左叶子的定义:必须是父节点的左子节点且自身无子节点。递归法采用后序遍历思路,在父节点判断左孩子是否为叶子节点;BFS法则通过队列层序遍历,在访问父节点时检查左孩子属性。两种方法都能正确累加左叶子值,但实现思路不同:递归简洁但可能栈溢出,BFS稳定但代码稍复杂。文章通过详细步骤和图解展示了两种解法的执行过程,帮助理解核心判断逻辑和避免重复计算的原理。

任岁月风干理想再也找不回真的我 945

Telegram 担保交易系统搭建指南:安全可靠的交易流程实现

本文介绍了基于Telegram Bot API搭建担保交易系统的完整方案。该系统通过第三方资金托管机制解决买卖双方信任问题,支持"付款后发货"和"收货后放款"的交易流程。文章详细阐述了系统架构设计,包括Telegram Bot交互层、后端业务逻辑层、数据库层和支付接口层。核心实现步骤涵盖:1)订单创建模块处理交易信息;2)支付处理模块集成Stripe Escrow实现资金托管;3)确认收货模块完成资金划转。系统采用PostgreSQL存储交易数据,并通过FastAPI

jingpide9527的博客 1960

算法题 左叶子之和

摘要:本文介绍了LeetCode 404题"左叶子之和"的解法。问题要求计算二叉树中所有左叶子的值之和。提供了四种解法:带标志的递归(O(n)时间)、父节点法(最优)、BFS和DFS迭代法。核心思路是识别左叶子节点(既是叶子又是左子节点),通过递归或迭代遍历树结构。代码示例展示了Java实现,并分析了各方法的时间/空间复杂度。以示例树[3,9,20,null,null,15,7]为例,正确结果为24(9+15)。

红血哥 714

Siemens SIMATIC软件二次开发:使用C#进行SIMATIC软件二次开发

通过使用OPC-UA通信协议和S7通信库,可以有效地在C#应用程序中与Siemens SIMATIC软件进行数据交换。OPC-UA提供了一个标准化的平台,而S7通信库则提供了直接访问PLC数据的能力。掌握这两种通信方式,将极大地增强在工业自动化领域的二次开发能力。在Siemens SIMATIC软件中,自定义功能块开发是实现二次开发的关键步骤之一。通过C#,可以创建高度定制化的功能块,以满足特定的控制需求。下面,我们将通过一个示例来展示如何使用C#开发一个自定义功能块。OPC-UA通信。

kkchenjj的博客 1415

RT-DETR算法优化改进:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

DCNv4更快收敛、更高速度、更高性能,完美和RT-DETR结合,助力涨点

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1323

404. 左叶子之和

本文解析了LeetCode 404题"左叶子之和"的两种解法:迭代法和递归法。迭代法采用层序遍历,通过队列实现,判断条件是节点的左孩子存在且无左右子节点;递归法采用后序遍历,分别处理左右子树并累加符合条件的左叶子值。文章详细分析了两种方法的代码结构、执行流程和复杂度,并讨论了常见错误和边界情况。该问题关键在于准确理解"左叶子节点"的定义,其解法可扩展应用于类似二叉树问题。

mrjieke6的博客 678

在ros中进行多传感器融合定位

ROS 中的 robots_localization 包是一个非常有用的包,可以使用各种卡尔曼滤波器融合任意数量的传感器!我们将使用它将全局姿势数据(x、y、z 和orientation)与机器人上的现有传感器融合,以实现更强大的定位!

如果想成为中心,那么就到中心去吧。 3003

LeetCode刷题-404. 左叶子之和

难度:简单⭐️⭐️⭐️。

快乐的小小程序猿 278

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

leetcode404. 左叶子之和

计算给定二叉树的所有左叶子之和。 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 思路:遍历二叉树找到叶子加起来,判断如果是右叶子就减去。 /** * Definition for a binary tree node. * public class TreeNode { ...

少说,多做。 3212

计算机控制技术及应用

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

刷题计划 day16 二叉树(五)【404. 左叶子之和】【513. 找树左下角的值】【112. 路径总和】【113. 路径总和 II】

⚡刷题计划day16二叉树(五)继续,往期可看专栏,关注不迷路,刷题计划 day16 二叉树(五)【404. 左叶子之和】【513. 找树左下角的值】【112. 路径总和】【113. 路径总和 II】

weixin_72499901的博客 1220

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

力扣404 左叶子之和

本文介绍了计算二叉树所有左叶子节点之和的算法。关键点在于需要通过父节点判断其左孩子是否为左叶子节点(即该节点是父节点的左子节点,且自身没有左右子节点)。算法采用深度优先搜索遍历二叉树,当遇到满足条件的左叶子节点时累加其值。时间复杂度为O(n),空间复杂度为O(h)(h为树高)。示例代码展示了如何实现该算法,包括判断条件和递归遍历过程。该解法适用于节点数在1到1000范围内的二叉树。

m0_58648798的博客 890

【LeetCode: 404. 左叶子之和 + 二叉树 + BFS】

【LeetCode: 404. 左叶子之和 + 二叉树 + BFS】给定二叉树的根节点 root ,返回所有左叶子之和。

Coder_ljw的博客 451

LeetCode 404. 左叶子之和(Sum of Left Leaves)

404. 左叶子之和 404. Sum of Left Leaves LeetCode404. Sum of Left Leaves 题目描述 计算给定二叉树的所有左叶子之和。 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。 Java 实现 TreeNode 结构 class TreeNo...

weixin_30894583的博客 201

LeetCode题练习与总结:左叶子之和--404

本文详细介绍了如何计算二叉树所有左叶子节点的和,包括解题思路、具体代码实现、时间复杂度和空间复杂度分析,以及涉及的知识点,为解决此类问题提供了清晰的指导。

一直学习永不止步 934

leetcode 404.左叶子之和 Java

左叶子之和题目链接描述示例代码 题目链接 https://leetcode-cn.com/problems/sum-of-left-leaves/ 描述 计算给定二叉树的所有左叶子之和。 示例 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 代码 其实不定义全局变量也是可以的,只是我觉得这样更方便一些 /** * Definition for a binary tree node. * public

博主是个二次元死肥宅~ 186

leetcode刷题:404. 左叶子之和(Java)

题目描述: 计算给定二叉树的所有左叶子之和。 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 **思路:**用递归遍历二叉树,如果该节点的左叶子不为空,则将其val累加起来。 /** * Definition for a binary tree node. * public clas...

MistyWood的博客 314

算法训练营day17(二叉树04:平衡二叉树,所有路径,左叶子和)

/遇到叶子结点,叶子结点的左子结点必为0。//每当递归深入时,我们将当前节点的值添加到paths中,每一层递归在返回的时候都有一层remove;if ( rightHeight == -1){//出递归的条件。if ( leftHeight == -1){//出递归的条件。

weixin_61931006的博客 1238

leetcode-左叶子之和

文章目录题目代码 题目 计算给定二叉树的所有左叶子之和。 示例: 3 / 9 20 / 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 代码 /* * @lc app=leetcode.cn id=404 lang=java * * [404] 左叶子之和 */ // @lc code=start /** * Definition for a...

lingle1的博客 541

[Leetcode][第404题][JAVA][左叶子之和][DFS][BFS]

【问题描述】[简单] 【解答思路】 1. DFS 递进思想 一步一步递进 /先序遍历求所有节点值之和 public int sumOfTrees(TreeNode root) { if (root == null) { return 0; } int leave = root.val; int left = sumOfTrees(root.left); int right = sumOfTre

dadongwudi的博客 186
上一篇: java数据结构与算法刷题-----LeetCode257. 二叉树的所有路径
下一篇: java数据结构与算法刷题-----LeetCode106. 从中序与后序遍历序列构造二叉树
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、付费专栏及课程。

余额充值