力扣第404题 左叶子之和 c++ 递归 与 迭代解法

题目

404. 左叶子之和

简单

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

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

示例 2:

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

提示:

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

思路和解题方法一(递归)

  1. 首先判断当前节点是否为空,如果为空,返回0。
  2. 递归计算左子树中所有左叶子节点的和,将结果保存在变量lsum中。
  3. 判断当前节点的左子节点是否存在,并且左子节点没有左孩子和右孩子(即为左叶子节点),如果满足条件,将当前左叶子节点的值赋给lsum
  4. 递归计算右子树中所有左叶子节点的和,将结果保存在变量rsum中。
  5. 计算当前节点的左叶子节点的和,即lsum + rsum,并返回。

通过递归调用,最终会计算出二叉树中所有左叶子节点的和。

复杂度

        时间复杂度:

                O(n)

时间复杂度为O(n),其中n是二叉树中的节点数。

        空间复杂度

                O(n)

空间复杂度:
这个递归函数使用了栈来存储递归调用的上下文。由于二叉树的深度可能非常大,因此递归调用的栈空间取决于二叉树的深度。在最坏的情况下,如果二叉树是倾斜的,即所有节点都在左子树或右子树中,那么递归调用的栈空间将是O(n)。因为需要为每个递归调用分配栈空间,所以空间复杂度是O(n)。

c++ 代码

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) { // 定义一个函数来计算二叉树中左叶子结点之和if (root == nullptr) return 0; // 如果当前节点为空,则返回0int lsum = sumOfLeftLeaves(root->left); // 递归计算左子树的左叶子结点之和if(root->left != nullptr&&root->left->left ==nullptr && root->left->right==nullptr)// 如果当前节点的左孩子存在且没有左右子节点,即为左叶子节点{lsum = root->left->val; // 将当前左叶子节点的值赋给lsum}int rsum = sumOfLeftLeaves(root->right); // 递归计算右子树的左叶子结点之和int sum  =  lsum + rsum; // 计算当前节点中所有左叶子结点之和return sum; // 返回当前节点中所有左叶子结点之和}
};

思路和解题方法二(迭代)

  1. 首先创建一个栈st,用于存储待处理的节点。
  2. 判断根节点root是否为空,如果为空,返回0。
  3. 将根节点root压入栈st中。
  4. 初始化结果变量result为0。
  5. 进入循环,直到栈st为空:
    • 弹出栈顶元素,并将其赋给临时变量node,表示当前处理的节点。
    • 如果node的左孩子存在,并且左孩子没有左右子节点(即为左叶子节点),将左叶子节点的值累加到result中。
    • 如果node有左孩子,将左孩子压入栈st中,以便后续处理。
    • 如果node有右孩子,将右孩子压入栈st中,以便后续处理。
  6. 循环结束后,返回结果变量result,即为二叉树中所有左叶子节点的和。

通过使用栈进行迭代,遍历并处理每个节点,最终求得二叉树中所有左叶子节点的和。

复杂度

        时间复杂度:

                O(n)

时间复杂度是O(n),其中n是二叉树的节点数。因为要对每个节点进行一次入栈和出栈操作,并且还要对每个节点的左子节点进行一次检查。

        空间复杂度

                O(n)

空间复杂度是O(n)。

c++ 代码

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {stack<TreeNode*> st; // 定义一个存储节点指针的栈,用于迭代遍历二叉树if (root == nullptr) return 0; // 如果二叉树为空,则直接返回0st.push(root); // 将根节点压入栈中int res = 0; // 初始化结果变量为0while (!st.empty()) { // 当栈非空时,继续迭代处理TreeNode* node = st.top(); // 获取栈顶元素,即当前处理的节点st.pop(); // 弹出栈顶元素if (node->left != nullptr && node->left->left == nullptr && node->left->right == nullptr) {// 如果当前节点存在左孩子节点,并且左孩子节点没有左右子节点,那么就是左叶子节点res += node->left->val; // 将当前左叶子节点的值累加到结果变量中}if (node->left != nullptr) st.push(node->left); // 如果当前节点存在左孩子节点,则将其压入栈中if (node->right != nullptr) st.push(node->right); // 如果当前节点存在右孩子节点,则将其压入栈中}return res; // 返回最终结果}
};

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

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

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

相关文章

asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制

一、源码特点 asp.net 饭店订餐管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net饭店订餐系统 二、功能介…

设计模式 - 访问者模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 访问者模式&#xff0c;即在不改变聚合对象内元素的前提下&#xff0c;为聚合对象内每个元素提供多种访问方式&#xff0c;即聚合对象内的每个元素都有多个访问者对象。访问者模式主要解决稳定的数据结构和易变元素的操作之间的…

Unity实现设计模式——策略模式

Unity实现设计模式——策略模式 策略模式是一种定义一些列算法的方法&#xff0c;这些所有的算法都是完成相同的工作&#xff0c;只是实现不同。它可以通过相同的方式调用所有的算法&#xff0c;减少各种算法类与使用算法类之间的耦合。 策略模式的 Strategy 类层次为 Contex…

放大招,百度文心大模型4.0正在加紧训练,即将发布

插播一条快讯&#xff01; &#xfeff;&#xfeff;刚刚看到一篇报道&#xff0c;说百度正在加紧训练文心大模型4.0&#xff01;百度5月发布了文心大模型3.5&#xff0c;才4个多月又要发布4.0了&#xff0c;这迭代速度简直了。据说这次发布将在10月17日百度世界大会上进行&am…

NeurIPS 2023 | 李飞飞团队提出SiamMAE:孪生掩码自编码器,刷榜视觉自监督方法

在计算机视觉领域&#xff0c;想要建立图像和场景&#xff08;scene&#xff09;之间之间的对应关系是一项比较困难的任务&#xff0c;尤其是在存在遮挡、视角改变或是物体外观发生变化的情况下。 最近&#xff0c;斯坦福大学李飞飞团队对MAE进行扩展&#xff0c;提出了孪生掩…

Tensorflow入门之 Hello World

Tensorflow入门之 Hello World 简介 Tensorflow 是 Google 开源的深度学习框架&#xff0c;来自于 Google Brain 研究项目&#xff0c;在 Google 第一代分布式机器学习框架 DistBelief 的基础上发展起来。 Tensorflow 的官方网址 http://www.tensorflow.org Tensorflow 的 G…

基于边缘网关的智慧工地监测方案

边缘物联网技术为千行百业赋能&#xff0c;依托边缘计算的低延时、高效率、广适用优势&#xff0c;也为工程建设产业带来新的增长动力。 例如在智慧工地应用中&#xff0c;围绕建设施工过程中的人员、设备、环境等要素&#xff0c;利用边缘计算网关构建全面的数据采集、分析、联…

web3.0时代分布式网络协议的异同

Web3.0时代标志着分布式网络协议的兴起&#xff0c;其中IPFS&#xff08;InterPlanetary File System&#xff09;和NDN&#xff08;Named Data Networking&#xff09;是备受瞩目的项目。尽管它们都属于分布式网络协议领域&#xff0c;但在多个方面存在显著区别。以下是IPFS和…

WebSocket ----苍穹外卖day8

介绍 实现步骤 各个模块详解 OnOpen OnOpen:标记一个方法作为处理WebSocket连接打开的方法 当一个客户端与服务器建立 WebSocket 连接时&#xff0c;服务器会接收到一个连接请求。一旦服务器接受了这个连接请求&#xff0c;一个 WebSocket 连接就会被建立。这时&#xff0c;被…

wpf中prism框架

安装prism包&#xff1a; 添加引用 using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; using Prism.DryIoc; using Prism.Ioc;namespace PrismDemo …

【Amazon】基于AWS云实例(CentOS 7.9系统)使用kubeadm方式搭建部署Kubernetes集群1.25.4版本

文章目录 前言实验架构介绍K8S集群部署方式说明使用CloudFormation部署EC2实例集群环境准备修改主机名并配置域名解析&#xff08;ALL节点&#xff09;禁用防火墙禁用SELinux加载br_netfilter模块安装ipvs安装 ipset 软件包同步服务器时间关闭swap分区安装Containerd 初始化集群…

Flutter_Slider_SliderTheme_滑杆/滑块_渐变色

调用示例以及效果 SliderTheme(data: SliderTheme.of(context).copyWith(trackHeight: 3,// 滑杆trackShape: const GradientRectSliderTrackShape(radius: 1.5),// 滑块thumbShape: const GradientSliderComponentShape(rectWH: 14, overlayRectSpace: 4, overlayColor: Colou…

数据采集时使用HTTP代理IP效率不高怎么办?

目录 前言 一. 测试代理IP速度 二. 调整连接池大小 三. 多线程并发采集 四. 选择稳定的代理服务商 总结 前言 数据采集作为爬虫的重要环节之一&#xff0c;常常会遇到反爬虫的机制&#xff0c;封禁IP等等问题。为了规避这些问题&#xff0c;我们可以使用HTTP代理IP来进行…

react中预览excel表格

查了很多资料&#xff0c;很多插件&#xff0c;有很多也用不了&#xff0c;最后试了xlsx这个插件&#xff0c;可以使用。 话不多少了&#xff0c;直接放代码吧&#xff1a; 1.代码实现 fetch(API).then((res: any) > {res?.blob().then((r: any) > {const reader ne…

HarmonyOS/OpenHarmony原生应用开发-华为Serverless云端服务支持说明(一)

云端服务的实现是HarmonyOS/OpenHarmony原生应用开发的一个重要的环节&#xff0c;如果用户端是鸿蒙原生应用&#xff0c;但是服务端即云端还是基于传统的各种WEB网络框架、数据库与云服务器&#xff0c;那么所谓的原生应用开发实现的数据即后端服务是和以前、现在的互联网、移…

【华为OD机考B卷 | 100分】统计监控、需要打开多少监控器(JAVA题解——也许是全网最详)

前言 本人是算法小白&#xff0c;甚至也没有做过Leetcode。所以&#xff0c;我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 OD&#xff0c;B 卷 100 分题目【OD 统一考试&#xff08;B 卷&#xff09;】 1. 题目描述 某长方形停车场每个车位上方都有一个监控…

常见算法-洗扑克牌(乱数排列)

常见算法-洗扑克牌&#xff08;乱数排列&#xff09; 1、说明 洗扑克牌的原理其实与乱数排列是相同的&#xff0c;都是将一组数字&#xff08;例如1∼N&#xff09;打乱重新排列&#xff0c;只不过洗扑克牌多了一个花色判断的动作而已。 初学者通常会直接想到&#xff0c;随…

vue2踩坑之项目:Swiper轮播图使用

首先安装swiper插件 npm i swiper5 安装出现错误&#xff1a;npm ERR npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue/eslint-config-standard6.1.0 npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/esl…

NPM 常用命令(十)

目录 1、npm prefix 1.1 使用语法 1.2 描述 1.3 示例 2、npm prune 2.1 使用语法 2.1 描述 3、npm publish 3.1 使用语法 3.2 描述 包中包含的文件 4、npm query 4.1 使用语法 4.2 描述 4.3 示例 5、npm rebuild 5.1 使用语法 5.2 描述 6、npm repo 6.1 使…