172.二叉树:左叶子之和(力扣)

代码解决

/*** 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) {queue<TreeNode*> que;  // 定义一个队列用于广度优先搜索if (root != nullptr) que.push(root);  // 如果根节点不为空,将其加入队列int sum = 0;  // 用于累加左叶子节点的和// 当队列不为空时进行循环while (!que.empty()) {int size = que.size();  // 获取当前队列的大小TreeNode* node;  // 用于存储当前节点// 遍历当前层的所有节点for (int i = 0; i < size; i++) {node = que.front();  // 取出队列的头节点que.pop();  // 弹出头节点// 如果左子节点存在if (node->left) {que.push(node->left);  // 将左子节点加入队列// 如果左子节点是叶子节点,累加其值到sumif (node->left->left == nullptr && node->left->right == nullptr) {sum += node->left->val;}}// 如果右子节点存在,将其加入队列if (node->right) que.push(node->right);}} return sum;  // 返回左叶子节点的和}
};
  • TreeNode 结构体定义

    • val:节点的整数值。
    • left:指向左子节点的指针。
    • right:指向右子节点的指针。
  • Solution 类

    • 包含一个公有方法 sumOfLeftLeaves
  • sumOfLeftLeaves 方法

    • 使用广度优先搜索(BFS)来遍历二叉树。
    • 定义一个队列 que 来存储节点,用于层次遍历。
    • 如果根节点不为空,将其加入队列。
    • 初始化 sum 为 0,用于累加左叶子节点的值。
    • 当队列不为空时,进行循环:
      • 获取当前层的节点数量 size
      • 遍历当前层的所有节点:
        • 取出队列的头节点 node 并弹出。
        • 如果左子节点存在:
          • 将左子节点加入队列。
          • 如果左子节点是叶子节点,将其值累加到 sum
        • 如果右子节点存在,将其加入队列。
    • 返回 sum,即所有左叶子节点的和。

方法二 

/*** 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 == nullptr) return 0;// 递归计算左子树中左叶子节点的和int leftval = sumOfLeftLeaves(root->left);// 如果左子节点存在且是叶子节点,直接取其值if (root->left && root->left->left == nullptr && root->left->right == nullptr) {leftval = root->left->val;}// 递归计算右子树中左叶子节点的和int rightval = sumOfLeftLeaves(root->right);// 返回左子树和右子树中左叶子节点的和int sum = leftval + rightval;return sum;}
};

sumOfLeftLeaves 方法

  • 递归计算二叉树中所有左叶子节点的和。
  • 如果根节点为空,返回 0。
  • 如果根节点是叶子节点,返回 0(因为根节点不算作左叶子)。
  • 递归计算左子树中左叶子节点的和 leftval
  • 如果左子节点存在且是叶子节点,直接取其值。
  • 递归计算右子树中左叶子节点的和 rightval
  • 返回左子树和右子树中左叶子节点的和。

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

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

相关文章

代码随想录算法训练营第32天(py)| 贪心 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

122.买卖股票的最佳时机II 力扣链接 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返…

python学习 - 在线 百度语音API 播报 测试案例分析

在进行百度语音API的播报测试时&#xff0c;可以遵循以下步骤来确保测试的顺利进行。 1. 注册百度语音账号 访问百度语音开发平台&#xff1a;ai.baidu.com/tech/speech注册成为百度开发者&#xff0c;创建个人或企业账号 2. 创建应用并获取API密钥 在控制台中&#xff0c;…

RandomDate(接口参数化-随机生成日期)

目录 1、入口位置&#xff1a;2、验证函数生成值3、获取 年月日时分秒 的全随机4、时间函数 前言&#xff1a;有时候我们做性能测试或者接口测试时&#xff0c;参数需要传入日期格式&#xff0c;但是又不想每次都是用同一个日期&#xff0c;我们就可以使用Jmeter工具中函数助手…

2024050702-重学 Java 设计模式《实战状态模式》

重学 Java 设计模式&#xff1a;实战状态模式「模拟系统营销活动&#xff0c;状态流程审核发布上线场景」 一、前言 写好代码三个关键点 如果把写代码想象成家里的软装&#xff0c;你肯定会想到家里需要有一个非常不错格局最好是南北通透的&#xff0c;买回来的家具最好是品…

Mysql 中的case-when

什么是 case-when case-when 是一种 sql 语句中的语法结构,结构如下&#xff1a; case 字段名 when 值 then 字段名|值 ... else 字段名|值 end case when 主要用于数据的 行列转换&#xff08;把一列数据转换为多列&#xff09; 前置条件&#xff1a; -- 表…

02.体验CSS以及Bootstrap框架

目录 CSS固定格式 1&#xff09;style标签 2&#xff09;div标签 3&#xff09;span标签 CSS属性 一、文字属性 1.规范文字样式的属性 2.规定文字粗细的属性 3.规定文字大小的属性 4.规范文字字体的属性 二、文本属性 1.文本装饰属性 2.文本水平对齐属性 3.文本缩进…

[flutter]一键将YAPI生成的api.json文件转为需要的Dart Model类的脚本

目的&#xff1a; 根据YAPI接口平台生成的api.json接口文件&#xff0c;将接口数据转化为model类&#xff0c;生成对应的接口值类型文件。 发现&#xff1a; api.json文件导出&#xff1a; YAPi是一个接口管理平台&#xff0c;登录账号打开项目后&#xff0c;在点击数据管理…

Vuex3学习笔记

文章目录 1&#xff0c;入门案例辅助函数 2&#xff0c;mutations传参辅助函数 3&#xff0c;actions辅助函数 4&#xff0c;getters辅助函数 5&#xff0c;模块拆分6&#xff0c;访问子模块的state辅助函数 7&#xff0c;访问子模块的getters辅助函数 8&#xff0c;访问子模块…

Python魔法之旅-魔法方法(23)

目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…

大宋咨询(深圳窗口满意度调查)关于政务服务窗口满意度调研的内容

政务服务窗口作为公政与社会公众之间的桥梁&#xff0c;其服务质量直接关系到公政形象与公众满意度。为了深入了解政务服务窗口的运作状况及公众的实际感受&#xff0c;大宋咨询&#xff08;深圳窗口满意度调查&#xff09;受客户委托开展政务服务窗口满意度第三方调研评估。 …

【Python】数据处理:OS目录文件操作

Python的os模块是一个用于与操作系统进行交互的标准库模块。它提供了丰富的功能来处理文件和目录、执行系统命令、获取和设置环境变量等。 工作目录操作 获取当前工作目录 os.getcwd()参数&#xff1a;无返回值&#xff1a;一个字符串&#xff0c;表示当前工作目录的路径。这…

数据库表中创建字段查询出来却为NULL?

起因&#xff1a; 今天新创建了一张表,其中一个字段命名为"word_num"带下划线&#xff0c;我在前端页面怎么也查询不出来word_num的值&#xff0c;后来在后端接口处打印了一下数据库查询出来的数据&#xff0c;发现这个字段一直为NULL&#xff0c;然后我就想到是不是…

什么,一不小心打造了一个基于大模型的操作系统

如果以大模型为Kernel, 形成一个新的操作系统&#xff0c;那么&#xff1a; 1. byzer-llm 是这个大模型操作系统的编程接口&#xff0c;有点类似Linux操作系统的C ABI。 2. byzer-retrieval 也被集成进 byzer- llm 接口里&#xff0c;算是大模型操作系统的文件系统&#xff0c…

Node.js 和 Vue 的区别的基本知识科普

Node.js和Vue.js在多个方面存在显著的区别。以下是这两者的主要区别,按照清晰的分点表示和归纳: Node.js 服务器端环境: Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它使JavaScript能够在服务器端运行。为JavaScript提供服务器端的环境服务,方便地搭建响应速度…

pytorch 自定义学习率更新 Poly

Poly 学习率调整策略需要继承_LRScheduler类&#xff0c;该类包含三个重要属性和两个重要方法 学习率与batch-size的关系 一般来说&#xff0c;batch-size的大小一般与学习率的大小成正比。batch-size越大一般意味着算法收敛方向的置信度越大&#xff0c;也可以选择较大的学…

STM32快速入门(ADC数模转换)

STM32快速入门&#xff08;ADC数模转换&#xff09; 前言 ADC数模转换存在的意义就是将一些温度传感器、各自数据传感器产生的模拟信号转换成方便识别和计算的数字信号。 导航 图24 通用定时器框图&#xff1a; 图片截取自STM32 F1XX中文参考手册。还是以框图为中心&#x…

scss是什么安装使⽤的步骤

当谈到SCSS时&#xff0c;我们首先需要了解它是什么。SCSS&#xff0c;也称为Sassy CSS&#xff0c;是Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;的一种语法&#xff0c;它是CSS的预处理器&#xff0c;允许你使用变量、嵌套规则、混合&#xff08;mixin&a…

FinalShell导出服务器配置信息密码password是加密的,如何解密?

本章教程,主要实现了一个小的功能,对FinalShell导出的配置信息,进行解密。 FinalShell导出之后,会产生一个json文件,例如下面这种json格式,里面记录了服务器的IP地址,端口和密码,里面的密码是经过加密处理的,本文主要利用java代码实现对这个password进行解密还原。 {&…

vue问题记录

vue3 路由跳转携带参数 路由跳转携带参数 query方法 //跳转传参 this.$router.push({path:/home,query: {id:1}}) //接受参数 this.$route.query.id问题&#xff1a;刷新页面&#xff0c;参数会丢失—未解决 将参数存在本地存储中&#xff0c;但是组件销毁时&#xff0c;清…