Leetcode 404-左叶子之和

news2024/9/24 23:32:10

题目

给定二叉树的根节点 root ,返回所有左叶子之和。
在这里插入图片描述
在这里插入图片描述

题解

二叉树的题目,如果需要返回某个值,可以分左右子树递归计算,最后sum=left+right

递归三部曲:

  • 确定递归函数的参数和返回值
    判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int,使用题目中给出的函数就可以了。
  • 确定终止条件
    如果遍历到空节点,那么左叶子值一定是0
  • 确定单层递归的逻辑
    当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。

代码中left为什么要分两块计算而right不用?
因为如果直接计算sumOfLeftLeaves(root.left)而root.left恰好为左叶子,则在进入root.left那一层时不再满足(root.left!=null&&root.left.left==null && root.left.right ==null)这个条件,所以left计算要分是否是左叶子两种情况计算

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        int sum,right,left;
        //边界条件
        if(root==null) return 0;
        /*
        这里left为什么要分两块计算而right不用?
        因为如果直接计算sumOfLeftLeaves(root.left)而root.left恰好为左叶子,则在进入root.left那一层时不再满足(root.left!=null&&root.left.left==null&&root.left.right==null)这个条件,所以left计算要分是否是左叶子两种情况计算
        */
        //满足条件:为左叶子
        if(root.left!=null&&root.left.left==null&&root.left.right==null){
            left=root.left.val;
        }else{
            left=sumOfLeftLeaves(root.left);
        }
        right=sumOfLeftLeaves(root.right);
        //返回值
        return left+right;
    }
}

错误做法:

使用全局变量计算左叶子之和,遇到左叶子时返回会使得root刚好只有一个左叶子节点时就返回了,不会进入右子树

class Solution {
    public int res;
    public int sumOfLeftLeaves(TreeNode root) {
        dfs(root);
        return res;
    }

    public void dfs(TreeNode root){
        //为空
        if(root==null) return;

        //满足条件:左叶子,结果集+left.val
        //这个做法会使得root刚好只有一个左叶子节点时就返回了,不会进入右子树
        //为了避免这种情况,需要返回某个值而不是直接返回
        if(root.left!=null&&root.left.left==null&&root.left.right==null){
            res+= root.left.val;
            return; 
        }

         //不为叶子节点
        if(root.left!=null||root.right!=null){
            dfs(root.left);
            dfs(root.right);//注意root的右子树也可能有左叶子
        }
    }
}

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

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

相关文章

函数式接口实现策略模式

函数式接口实现策略模式 1.案例背景 我们在日常开发中,大多会写if、else if、else 这样的代码,但条件太多时,往往嵌套无数层if else,阅读性很差,比如如下案例,统计学生的数学课程的成绩: 90-100分&#…

微分方程(Blanchard Differential Equations 4th)中文版Section6.1

拉普拉斯变换 积分变换 在本章中,我们研究了一种工具——拉普拉斯变换,用于解微分方程。拉普拉斯变换是众多不同类型的积分变换之一。一般来说,积分变换解决的问题是:一个给定的函数 y ( t ) y(t) y(t) 在多大程度上“像”一个…

温馨网站练习运用

第二次与团队一起制作网页虽然不进行商用,但是练习一下还是好的😊😊 我主要负责后端部分,该项目用了SpringBoot框架、SpringSecurity的安全框架、结合MyBatis-Plus的数据库查询。如果想看看,网站:温馨网登…

Python基础性知识(中部分)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1、Python中的语句1.1 顺序语句1.2 条件语句1.3 循环语句1.3.1 while循环1.3.2 for循环1.3.3 break与continue语句 1.4 综合三大语句制作小游戏--人生重开模拟器…

opencv之形态学

文章目录 1. 什么是形态学2. 形态学操作2.1 腐蚀2.2 膨胀2.3 通用形态学函数2.4 开运算2.5 闭运算2.6 形态学梯度运算2.7 礼帽运算2.8 黑帽运算 1. 什么是形态学 在图像处理领域,形态学是一种基于形状的图像分析技术,用于提取和处理图像的形态特征。这包…

存储架构模式-分片架构和分区架构

分片架构 分片架构就可以解决主从复制存在的问题,如果主机能够承担写的性能,那么主从就够了,如果不能,那么就需要分片架构了。 分片架构设计核心 分片架构设计核心-分片规则 案例1:不合理,因为不同年龄是不…

echarts组件——饼图

echarts组件——饼图 饼图&#xff0c;环形图 组件代码 <template><div :class"classname" :style"{height:height,width:width}" /> </template><script> // 环形图 import * as echarts from echarts require(echarts/them…

计算机毕业设计PySpark+Scrapy农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop

(1)能够根据计算机软硬件知识和数学知识给出复杂工程设计的基本思路和解决方案&#xff1b;在考虑社会、健康、安全、法律、文化以及环境等因素下可对设计方案及软硬件系统等在技术、经济等方面进行评价&#xff0c;确认其可行性&#xff1b; (2)能够建立软硬件系统、应用数学、…

【鸿蒙开发】02 复刻学习文档之待办列表

文章目录 一、前言叨叨二、创建应用三、项目初始化及代码分析1. 应用启动入口2. 解读Demo代码并Copy3、常量数据及静态资源文件AppStore下的resourcesentry下的resources 四、效果展示 一、前言叨叨 在考试内容看完之后&#xff0c;并且获取到了高级认证&#xff0c;但是在真正…

linux系统中USB模块鼠标驱动实现

各位开发者大家好,今天主要给大家分享一下,Linux系统中使用libusb的方法以及鼠标驱动实现。 第一:libusb概述 参考网址:* libusb GIT仓库:https://github.com/libusb/libusb.git * libusb 官网:https://libusb.info/ * libusb API接口:https://libusb.sourceforge.io/…

python中logging库使用

文章目录 1、前言2、日志的等级3、logging的基本应用4、logging的进阶应用5、logging的高阶应用6、简单调用7、参考 1、前言 编程代码中&#xff0c;日志的合理使用&#xff0c;能够很好地监控代码的运行过程&#xff1b;在业务部署中&#xff0c;通过日志的记录情况&#xff0…

5G NR 辅同步信号SSS介绍 MATLAB实现

5G NR辅同步信号SSS&#xff0c;和PSS一起包含了小区的全部ID信息&#xff0c;跟NBIOT 和LTE不一样&#xff0c;PSS和SSS并不携带任何的帧信息&#xff0c;只携带帧头同步信息&#xff0c;所以搜索完成PSS和SSS并不知道当前的slot号和帧号&#xff0c;在5G NR中&#xff0c;PSS…

Clion 使用

1. 使用CLion进行ROS开发 安装基本的ROS环境 ROS环境的安装请参考安装ROS。 安装CLion 下载CLion Linux的下载地址如下&#xff1a;CLion 解压CLion 将下载的CLion复制到/opt目录下&#xff08;你可以解压到适合自己的文件夹&#xff0c;只要保证后续使用的路径一致即可…

黑神话悟空-用签名检查以允许加载 mod .pak(安装MOD可以不用再使用“ -fileopenlog “命令)

安装 下载并解压到 BlackMythWukong\b1\Binaries\Win64 位置参考&#xff1a; 安装此 mod 后&#xff0c;再安装.pak类型MOD时就可以不再使用" -fileopenlog "命令也可以生效了.因为该命令可能会导致在具有常规 HDD 的低配置计算机上卡顿。 下载地址&#xff1a;h…

macos 10.15 Catalina 可用docker最新版本 Docker Desktop 4.15.0 (93002) 下载地址与安装方法

按照docker官方的4.16.0版本发行日志"4.16.0: (2023-01-12 Minimum OS version to install or update Docker Desktop on macOS is now macOS Big Sur (version 11) or later.)" , 这个4.16.0版本就必须要求最低版本os为 11版本, 所以 旧版本的macos 10.15 Catalina …

为了支持XR,3GPP R18都做了哪些增强?

这篇是R18 XR enhancement的第二篇,主要看下从NAS->L3->L2->L1针对XR都做了哪些增强。 1 PDU set QoS 在UL和DL中,XR-Awareness有助于优化gNB无线资源调度,但是这里就依赖于 PDU set和data burst。这两个东西是什么意思?其实PDU set就是由一个或多个 PDU组成,这…

【 OpenHarmony 系统应用源码解析 】-- Launcher 桌面布局

前言 阅读本篇文章之前&#xff0c;有几个需要说明一下&#xff1a; 调试设备&#xff1a;平板&#xff0c;如果你是开发者手机&#xff0c;一样可以加 Log 调试&#xff0c;源码仍然是手机和平板一起分析&#xff1b;文章中的 Log 信息所显示的数值可能跟你的设备不一样&…

C语言中的“#”和“##”

目录 开头1.什么是#?2.什么是##?3.#和##的实际应用输出变量的名字把两个符号连接成一个符号输出根据变量的表达式…… 下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。在今天&#xff0c;我们要学一下关于C语言中的#和##的一些知识。 1.什么是#? #&#xff0…

Datawhale X 李宏毅苹果书 AI夏令营-深度学入门task2:线性模型

1.线性模型 把输入的特征 x 乘上一个权重&#xff0c;再加上一个偏置就得到预测的结果&#xff0c;这样的模型称为线性模型&#xff08;linear model&#xff09; 2.分段线性模型 线性模型也许过于简单&#xff0c;x1 跟 y 可能中间有比较复杂的关系。线性模型有很大的限制&…

上书房信息咨询:商标相似性评估调研

商标相似性评估调研可以帮助确定商标之间的相似性程度&#xff0c;为商标注册、商标权利维护和商标侵权案件提供参考依据。以下是进行商标相似性评估调研的一般步骤&#xff1a; 1、收集商标信息&#xff1a;收集相关商标的注册证书、商标注册申请、商标注册公告等信息&#x…