6.11左叶子之和(LC404-E)

用java定义树:

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
//一个空构造方法`TreeNode()`,用于初始化节点的默认值。
    TreeNode() {}
//一个构造方法`TreeNode(int val)`,用于初始化节点的值,并设置默认的左右子节点。
    TreeNode(int val) { this.val = val; }
//一个构造方法`TreeNode(int val, TreeNode left, TreeNode right)`,用于初始化节点的值、左子节点和右子节点。
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

在Java中,每个源代码文件只能包含一个公共类。这意味着在一个源代码文件中,只能有一个类被声明为公共类(使用 `public class` 关键字)。

该公共类的名称必须与文件名相匹配,以确保编译器能够正确识别和加载该类。

然而,一个源代码文件可以包含多个非公共类(非公共类没有使用 `public` 修饰符)。这些非公共类可以在同一个文件中定义,并且可以被同一个包中的其他类访问和使用。

虽然一个源代码文件只能有一个公共类,但可以在同一个项目中有多个源代码文件,每个文件都包含一个公共类。这样可以通过在不同的文件中定义不同的公共类来组织和管理代码。

总结起来,一个源代码文件只能包含一个公共类,但可以包含多个非公共类。通过使用多个源代码文件,可以在一个项目中拥有多个公共类。

题目:

算法:

我们可以很容易得判断叶子节点,但是难以判断左叶子。

可以这样判断:

20.left.left==null && 20.left != null && 20.left.right==null

这道题适合后序遍历(LRV),最后把值传到根节点。

正确代码:

/**
 * 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) {
        //首先判断root是否为空
        //JAVA的if判断要用括号,无冒号
        if (root == null) return 0;
        //递归调用`sumOfLeftLeaves`方法计算左子树的左叶子节点
        int leftnum = sumOfLeftLeaves(root.left);
        //递归调用`sumOfLeftLeaves`方法计算右子树的左叶子节点
        int rightnum = sumOfLeftLeaves(root.right);
        //判断当前节点的左子节点是否存在,且它的左子节点和右子节点都为null。
        //如果满足这个条件,说明当前节点的左子节点是一个左叶子节点,将其值赋给`midnum`。
        int midnum = 0;
        if (root.left != null && root.left.left == null && root.left.right == null)
        midnum = root.left.val;
        int sum = leftnum + rightnum + midnum;
        return sum;

    }
}

注意:

每次写完后面都要加“;”

每出现一个新变量,都要声明其类型

时间空间复杂度:

这段代码的时间复杂度为O(n),其中n是二叉树中的节点数量。这是因为代码使用递归方式遍历整个二叉树,每个节点都会被访问一次。

空间复杂度取决于递归调用的深度,即递归栈的大小。在最坏的情况下,如果二叉树是一个单链的斜树,递归栈的深度将是n,因此空间复杂度为O(n)。在平均情况下,递归栈的深度取决于二叉树的平衡性,通常为O(log n)。

总结起来,这段代码的时间复杂度为O(n),空间复杂度为O(n)或O(log n),取决于二叉树的形状。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity3D】MAX聚合广告SDK——Pangle广告接入

Pangle, App Monetization Simplified 注册 登录 创建应用 创建广告单元 将其应用ID和广告ID关联到MAX广告。 下载Pangle Unity Plugin包,新建一个空工程(很重要) Unity版本2019.4.0f1 gradle plugin 4.2.0 gradle版本6.7.1 build_tools 34.…

el-uploader同一文件无法上传问题

在上传成功和失败的回调方法中,吊用一下clearFiles方法。 this.$refs.upload.clearFiles();

Node.js入门指南(四)

目录 express框架 express介绍 express使用 express路由 express 响应设置 中间件 路由模块化 EJS 模板引擎 express-generator hello,大家好!上一篇文章我们介绍了Node.js的模块化以及包管理工具等知识,这篇文章主要给大家分享Nod…

c语言中指针详解

内存与地址 1.地址的概念 众所周知数据需要在内存中读取,那么我们当我们需要找这个内存时该怎么办?其实在计算机中每个内存单元都有一个编号,有了这个编号CPU可以快速找到内存空间,在这里我们将这个编号叫做地址,在c…

企业计算机服务器中了360勒索病毒怎么办,360勒索病毒解密文件恢复

计算机技术的不断发展,为企业的生产运营提供了极大便利,不仅提升了办公效率,还促进了企业的发展。企业计算机在日常工作中一定加以防护,减少网络威胁事件的产生,确保企业的生产生产运营。最近,网络上的360后…

nodejs+vue+python+PHP+微信小程序-健身俱乐部在线管理平台的设计与实现-安卓-计算机毕业设计

随着经济的发展、财富的累积,人们生活水平、生活质量大幅度提高,生活环境得到明显改善,但是竞争激烈、人们生活压力大、生活节奏快加上饮食习惯和生活方式不合理导致国内 亚健康人群逐年增多。统计数据表明当前我国亚健康人群比例已经超过了7…

vscode导入STM32CubeIDE工程文件夹未定义警告清除方法

0 前言 在我们使用vscode去编辑STM32CubeIDE的工程文件时,经常会出现一些类型未定义、头文件路径无效的问题,无法正常使用且非常影响观感。本文介绍如何设置vscode导入的STM32CubeIDE配置文件,解决这一问题。 1 vscode导入STM32CubeIDE工程…

JVM——几种常见的对象引用

目录 1. 软引用软引用的使用场景-缓存 2.弱引用3.虚引用和终结器引用 可达性算法中描述的对象引用,一般指的是强引用,即是GCRoot对象对普通对象有引用关系,只要这层关系存在, 普通对象就不会被回收。除了强引用之外,Ja…

Python武器库开发-前端篇之CSS盒模型(三十一)

前端篇之CSS盒模型(三十一) CSS盒模型是指网页中的每个元素可以看做是一个矩形盒子,该盒子有四个主要部分组成:content、padding、border和margin。其中: content:指盒子中的内容区域,可以包含文本、图像、视频、其他…

illuminate/database 使用 四

文档:Hyperf Database: Getting Started - Laravel 10.x - The PHP Framework For Web Artisans 因为hyperf使用illuminate/database,所以按照文章,看illuminate/database代码实现。 一、读写分离 根据文档读写的host可以分开。设置读写分…

辅助驾驶功能开发-系统方案篇-地平线超级驾驶解决方案介绍

01.产品方案 Horizon Matrix SuperDrive超级驾驶解决方案,助力汽车智能化步入人机共驾时代 SuperDrive超级驾驶解决方案,全面整合了自动驾驶、智能交互、云端大脑三大模块,形成完整的泛车载AI人工智能系统,帮助整车智能化提升到一个新的高度。该方案的核心硬件-车载中央计…

从0到0.01入门 Webpack| 006.精选 Webpack面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

基于Loki + Promtail + Grafana 搭建 Nginx 日志监控

文章目录 引言第一部分:Loki 简介与安装1.1 Loki 简介1.2 Loki 安装1.2.1 下载 Loki1.2.2 安装 Loki 1.3 启动 Loki 第二部分:Promtail 简介与安装2.1 Promtail 简介2.2 Promtail 安装2.2.1 下载 Promtail2.2.2 安装 Promtail 2.3 启动 Promtail 第三部分…

MySQL 库操作 | 表操作

文章目录 一.MySQL库的操作1.创建数据库2.字符集和校验规则3.操纵数据库 二.MySQL表的操作1.创建表2.操作表3.删除表 一.MySQL库的操作 1.创建数据库 创建数据库 创建数据库的SQL如下: CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSETcharset_name…

Java基于协同过滤算法开发的springboot+vue服装商城

演示视频 https://www.bilibili.com/video/BV1oH4y127fq/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 主要功能:用户可以浏览商品和特价商品,加入购物车,直接下单支付,在我的个人中心里可以管理自己的…

【数据结构实验】树(一)构建二叉查找树(BST)

文章目录 1. 引言2. 二叉查找树3. 实验内容3.1 实验题目(一)输入要求(二)输出要求 3.2 算法实现1. 数据结构2. 全局变量3. 中序遍历函数InOrder4. 二叉查找树的构建函数T5. 主函数 3.3 代码整合 4. 实验结果 1. 引言 二叉查找树&a…

python多线程为什么没有跑满CPU?

1、实验环境 Vmvare虚拟机:单处理器2核。 2、Python获取CPU使用率 import psutildef get_cpu_percent():cpu_percent psutil.cpu_percent(interval1)return cpu_percentwhile(1):cpu_percent get_cpu_percent()print("当前CPU占用率:{}%"…

第81篇:JSONP劫持漏洞获取敏感信息原理、复现与坑点总结

Part1 前言 大家好,我是ABC_123。今天我们研究一下JSONP劫持漏洞,早些年这个漏洞主要被攻击者用来窃取个人信息,如姓名、身份证号、家庭住址等,现在更多的用于蜜罐之中,间接溯源红队攻击者的个人身份。好多朋友至今对…

34970A 数据采集 / 数据记录仪开关单元

34970A 数据采集 / 数据记录仪开关单元 产品综述: Keysight 34970A 数据采集/数据记录仪开关单元由一个 3 插槽主机和一个内置的 6 1/2 位数字万用表组成。每个通道可以单独配置,以测量 11 种不同功能之一,这样既不会增加成本,也…

mybatis的使用,mybatis的实现原理,mybatis的优缺点,MyBatis缓存,MyBatis运行的原理,MyBatis的编写方式

文章目录 MyBatis简介结构图Mybatis缓存(一级缓存、二级缓存)MyBatis是什么?mybatis的实现原理JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?Mybatis优缺点优点缺点映射关系 MyBatis的解析和运行原理MyBatis的…