LeetCode 404.左叶子之和

LeetCode 404.左叶子之和

1、题目

题目链接:404. 左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:
image.png

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

输入: root = [1]
输出: 0

提示:

  • 节点数在 [1, 1000] 范围内
  • -1000 <= Node.val <= 1000

2、深度优先搜索(递归)

思路

代码

#include <iostream>using namespace std;//Definition for a binary tree node.
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {// 如果根节点为空,则返回0if (root == nullptr) {return 0;}// 如果根节点既没有左子节点也没有右子节点(即该节点为叶子节点),返回0if (root->left == nullptr && root->right == 0) {return 0;}// 递归计算左子树的左叶子节点之和int leftValue = sumOfLeftLeaves(root->left);// 如果左子节点存在且为叶子节点,则将左子节点的值赋给leftValueif (root->left != nullptr && root->left->left == nullptr && root->left->right == nullptr) {leftValue = root->left->val;}// 递归计算右子树的左叶子节点之和int rightValue = sumOfLeftLeaves(root->right);// 返回左子树的左叶子节点之和加上右子树的左叶子节点之和return leftValue + rightValue;}
};int main() {TreeNode* root = new TreeNode(3, new TreeNode(9), new TreeNode(20, new TreeNode(15), new TreeNode(7)));Solution s;cout << s.sumOfLeftLeaves(root) << endl;return 0;
}

复杂度分析

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

3、深度优先搜索(精简版)

思路

代码

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {// 如果根节点为空,则返回0if (root == nullptr) {return 0;}int leftValue = 0;// 如果根节点的左子节点不为空,且左子节点为叶子节点(即左子节点的左右子节点都为空)if (root->left != nullptr && root->left->left == nullptr && root->left->right == nullptr) {// 将左子节点的值赋给leftValueleftValue = root->left->val;}// 返回左子节点的值加上左子树和右子树中左叶子节点值的总和return leftValue + sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);}
};

复杂度分析

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

4、广度优先搜索(迭代法)

思路

代码

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {stack<TreeNode*> stk;if (root == nullptr) {return 0;}stk.push(root);int result = 0;while (!stk.empty()) {// 取出栈顶节点TreeNode* node = stk.top();stk.pop();// 判断左子节点是否存在,且为叶子节点if (node->left != nullptr && node->left->left == nullptr && node->left->right == nullptr) {// 如果是,则累加左子节点的值result += node->left->val;}// 如果右子节点存在,则入栈if (node->right) {stk.push(node->right);}// 如果左子节点存在,则入栈if (node->left) {stk.push(node->left);}}return result;}
};

复杂度分析

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

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

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

相关文章

SaToken框架实现在Rpc上下文的login处理逻辑

最近在工作中遇到一个需求&#xff0c;需要在项目A中实现一个rpc接口供其他项目调用&#xff0c;接口返回登录token&#xff0c;从而实现其他项目的用户能免密登录到项目A。 项目A是用了SaToken来做的鉴权&#xff0c;原本我的打算是直接在rpc中调用StpUtil.login()方法来实现登…

在Flask中使用Celery完成异步和定时任务(Flask、Celery、Redis)

编程目标 通过使用Flask和Celery&#xff0c;实现一个简单的Web应用程序&#xff0c;能够接收HTTP POST请求&#xff0c;并异步发送电子邮件。 说明 使用Flask创建一个简单的Web应用程序&#xff0c;包含一个HTTP POST路由&#xff0c;用于接收发送电子邮件的请求。使用Cele…

离心式冷水机组的控制逻辑

1&#xff09;冷冻水泵启停控制 机组处于停机状态下启动机组时&#xff0c;冷冻水泵相对于油泵提前 5 分钟启动&#xff0c;在机组开机状态下 &#xff08;包括待机&#xff09;&#xff0c;冷冻水泵一直处于开机状态&#xff0c;机组正常关机后&#xff0c;冷冻水泵相对于主电…

基于Spring Boot的酒店管理系统设计与实现

基于Spring Boot的酒店管理系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统首页界面图&#xff0c;在系统首页可以查看首页…

java io包

InputStream InputStream 是 Java I/O 中所有输入流的抽象基类&#xff0c;它定义了读取字节流的基本方法。InputStream 类提供了许多子类&#xff0c;用于从不同的数据源读取数据&#xff0c;如文件、网络连接、内存等。 InputStream 提供了以下常用的方法&#xff1a; int…

Spring Data JPA 与 MyBatisPlus的比较

前言 JPA&#xff08;Java Persistence API&#xff09;和MyBatis Plus是两种不同的持久化框架&#xff0c;它们具有不同的特点和适用场景。 JPA是Java官方的持久化规范&#xff0c;它提供了一种基于对象的编程模型&#xff0c;可以通过注解或XML配置来实现对象与数据库的映射…

如何给网页添加一个炫酷鼠标点击特效,鼠标特效源码分享(更多特效持续收集中...)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 鼠标特效 📒📝 火花特效🎈 源码📝 爱心特效🎈 源码📝 彩球爆炸特效🎈 源码📝 更多特效📖 介绍 📖 你是否厌倦了平淡无奇的网页交互?是否渴望为你的网站增添一抹亮色?本文将持续更新,与大家分享收集到的前…

区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(二)

&#x1f436;原文&#xff1a; Preventing Content Cloning in NFT Collections &#x1f436;写在前面&#xff1a; 这是一篇 2023 年的 CCF-C 类&#xff0c;本博客只记录其中提出的方法。 F C o l l N F T \mathbf{F_{CollNFT}} FCollNFT​ and ERC-721 NFTs 在以太坊这样…

【数学建模】天然肠衣搭配问题衍生问题/线性规划限制条件建立问题

线性规划限制条件建立问题 前景回顾/提出问题回顾1回顾2/问题提出解决前提 解决方法坐标轴(区间)法总结 前景回顾/提出问题 回顾1 首先回顾一下DVD在线租赁问题 在 question2中&#xff0c;需要保证每个人都不会收到自己不喜欢的DVD&#xff0c;即客户在线订单数为0时候&…

Oracle中long和clob的区别和例子

在Oracle数据库中&#xff0c;LONG和CLOB&#xff08;Character Large Object&#xff09;都是用于存储大量字符数据的类型&#xff0c;但它们之间存在一些关键的区别。 存储方式&#xff1a; LONG&#xff1a;是以行存储的形式存储在数据行中的。当查询涉及到LONG列时&#…

umi6.x + react + antd的项目增加403(无权限页面拦截),404,错误处理页面

首先在src/pages下创建403&#xff0c;404&#xff0c;ErrorBoundary 403 import { Button, Result } from antd; import { history } from umijs/max;const UnAccessible () > (<Resultstatus"403"title"403"subTitle"抱歉&#xff0c;您无权…

进度条(小程序)

缓冲区的概念 缓冲区是内存中的一个临时存储区域&#xff0c;用来存放输入或输出数据。在标准 I/O 库中&#xff0c;缓冲区的使用可以提高数据处理的效率。例如&#xff0c;当向终端输出文本时&#xff0c;字符通常存储在缓冲区中&#xff0c;直到缓冲区满或者遇到特定条件时才…

FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX&#xff0c;通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了&#xff0c;无法应用于真实直播的生产环境&#xff0c;真正能用于生产环境…

HarmonyOS开发之ArkTS使用:新建活动页面

目录 目录 引言 关于ArkTS 开发环境准备 新建项目 新建活动页面 编写ArkTS代码 注册页面 运行应用 最后 引言 随着HarmonyOS&#xff08;鸿蒙操作系统&#xff09;的不断发展&#xff0c;越来越多的前端开发者投入到这个全新的生态系统中。而在HarmonyOS的开发中&…

自我模拟面试

在面试中&#xff0c;你如何面对面试官呢&#xff1f; 我认为&#xff0c;对于面试官提出的问题&#xff0c;如果你不会&#xff0c;那就是不会。你的思考过程&#xff0c;实际上就是将你平时所学的&#xff0c;所了解的&#xff0c;在脑海中进行一次复习&#xff0c;就像当别…

线上副业新选择:宅家工作,4个项目助力增收!

在这个繁华世界&#xff0c;财富与智慧并驾齐驱。越来越多的人意识到&#xff0c;除了主业外&#xff0c;开拓一份副业是实现财富增长的重要途径。在此&#xff0c;我为大家精心挑选了几个值得一试的网上赚钱副业。 1&#xff0c;参与网络调查与问卷填写 随着大数据时代的到来…

[大师C语言(第三篇)]C语言函数参数背后的秘密

C语言函数参数背后的秘密&#xff08;一&#xff09; 在C语言中&#xff0c;函数是执行特定任务的一段代码&#xff0c;可以通过参数传递数据。函数参数是C语言中非常基本且重要的概念&#xff0c;但它们背后的技术原理可能并不为人所熟知。本文将深入探讨C语言函数参数的技术…

kkkkkkkkkkkk564

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 人工智能与机器学习 &#x1f4dd;人工智能相关概念☞什么是人工智能、机器学习、深度学习☞人工智能发…

UINXU

进入选项字节配置界面之后&#xff0c;从上到下框选的部分依次是读保护、用户配置部分、自定义的两个字节和写保护&#xff0c;这四个部分的配置也是可以直接点击就可以配置。 写保护点一下是四页同时打钩&#xff0c;对应选项字节里的一个位配置4个闪存页 配置完成之后点击…

YOLOv8 Tensorrt Python/C++部署详解

按照大佬的方法进行部署&#xff0c;但是中间出现了很多问题&#xff0c;这里进行一下总结。 YOLOv8 Tensorrt Python/C部署教程_yolo 安装tensorrt-CSDN博客https://blog.csdn.net/weixin_45747759/article/details/130341118 Monday-Leo/Yolov5_Tensorrt_Win10: A simple i…