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);  // 将左子节点加入队列
                    // 如果左子节点是叶子节点,累加其值到sum
                    if (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) {
        // 如果根节点为空,返回0
        if (root == nullptr) return 0;
        
        // 如果根节点是叶子节点(不算作左叶子),返回0
        if (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
  • 返回左子树和右子树中左叶子节点的和。

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

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

相关文章

深入理解C语言:main函数的奥秘

在C语言中&#xff0c;main函数是每个程序的入口点&#xff0c;起着至关重要的作用。本文将深入探讨main函数的工作原理&#xff0c;包括其参数、返回值、以及如何从main启动程序的执行。通过实际代码示例&#xff0c;读者将更深入地理解main函数在C语言编程中的核心地位。 第一…

APP单页分发源码下载安卓苹果自动识别apk描述文件免签自动安装

下载地址&#xff1a;APP单页分发源码下载安卓苹果自动识别apk描述文件免签自动安装

Ubuntu虚拟机使用纯命令行对根分区进行扩展

Ubuntu虚拟机使用纯命令行对根分区进行扩展 前排提示 因为Ubuntu再安装时&#xff0c;根分区是没有使用LVM进行磁盘管理的&#xff0c;所以如果想扩展根分区&#xff0c;我们不得不使用另外一种暴力的方法。简单来说就是利用fdisk删除原来的根分区再基于原来的起始块号重新建…

使用C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

LabVIEW与PLC的区别

LabVIEW和PLC是工业自动化领域中常见的两种控制和测控方案&#xff0c;各自有独特的优点和适用场景。本文将从多角度比较两者&#xff0c;帮助用户在选择控制系统时做出更明智的决策。 技术背景 LabVIEW LabVIEW是由National Instruments公司开发的图形化编程环境&#xff0…

C# 界面控件中英切换

编程软件:VS 2015 需求:界面有两个按钮&#xff0c;点击可以将界面上所有控件进行不同语言的切换。 一共两种方案&#xff0c;个人认为第二种方案使用范围更广&#xff08;这里以中英文切换为例&#xff09;。 方案一:如图所示&#xff0c;建立两个资源文件 将所需控件的中英…

大厂真实面试题(一)

滴滴大数据sql 取出累计值与1000差值最小的记录 1.题目 已知有表t_cost_detail包含id和money两列,id为自增,请累加计算money值,并求出累加值与1000差值最小的记录。 2.分析 本题主要是想找到累加值域1000差距最小的记录,也就是我们要对上述按照id进行排序并且累加,并…

Python 机器学习 基础 之 【实战案例】中药数据分析项目实战

Python 机器学习 基础 之 【实战案例】中药数据分析项目实战 目录 Python 机器学习 基础 之 【实战案例】中药数据分析项目实战 一、简单介绍 二、中药数据分析项目实战 三、数据处理与分析实战 1、数据读取 2、中药材数据集的数据处理与分析 2.1数据清洗 2.2、 提取别…

如何微调 Llama 3 进行序列分类?

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

如何在隔离环境中设置 LocalAI 以实现 GPU 驱动的文本嵌入

作者&#xff1a;来自 Elastic Valeriy Khakhutskyy 你是否想在 Elasticsearch 向量数据库之上构建 RAG 应用程序&#xff1f;你是否需要对大量数据使用语义搜索&#xff1f;你是否需要在隔离环境中本地运行&#xff1f;本文将向你展示如何操作。 Elasticsearch 提供了多种方法…

Python:处理矩阵之NumPy库(上)

目录 1.前言 2.Python中打开文件操作 3.初步认识NumPy库 4.使用NumPy库 5.NumPy库中的维度 6.array函数 7.arange函数 8.linspace函数 9.logspace函数 10.zeros函数 11.eye函数 前言 NumPy库是一个开源的Python科学计算库&#xff0c;它提供了高性能的多维数组对象、派生对…

CSS函数: translate、translate3d的使用

translate()和translate3d()函数可以实现元素在指定轴的平移的功能。函数使用在CSS转换属性transform的属性值。实现转换的函数类型有&#xff1a; translate()&#xff1a;2D平面实现X轴、Y轴的平移translate3d()&#xff1a;3D空间实现位置的平移translateX()&#xff1a;实…

中国现代书法第一人颜廷利:全球知名哲学家思想家教育家

在人生的旅途中&#xff0c;如果一个人的所有追求仅仅是为了满足自己的需求和欲望&#xff0c;而非出于善意、行善或造福他人&#xff0c;那么无论其遭受了多少苦难&#xff0c;这样的生活是难以赢得他人的同情或怜悯的。这是东方哲学家、科学家颜廷利教授在其著作《升命学说》…

GQA,MLA之外的另一种KV Cache压缩方式:动态内存压缩(DMC)

0x0. 前言 在openreview上看到最近NV的一个KV Cache压缩工作&#xff1a;https://openreview.net/pdf?idtDRYrAkOB7 &#xff0c;感觉思路还是有一些意思的&#xff0c;所以这里就分享一下。 简单来说就是paper提出通过一种特殊的方式continue train一下原始的大模型&#x…

一场决定未来的战役,又是梦想起航的地方

大家好&#xff0c;我是小悟 今天不聊技术也不说系统&#xff0c;2024年高考的第一天&#xff0c;首先祝愿所有高考生在这特别的日子里&#xff0c;心态沉稳&#xff0c;答题顺利&#xff0c;让多年的努力在这一刻绽放光芒。 高考&#xff0c;这个承载了无数青春梦想与汗水的…

【栈】2751. 机器人碰撞

本文涉及知识点 栈 LeetCode2751. 机器人碰撞 现有 n 个机器人&#xff0c;编号从 1 开始&#xff0c;每个机器人包含在路线上的位置、健康度和移动方向。 给你下标从 0 开始的两个整数数组 positions、healths 和一个字符串 directions&#xff08;directions[i] 为 ‘L’ …

OCP-042之:Oracle结构体系

1. Oracle结构体系 1.1 概述 1.1.1 版本 版本后缀所代表的含义 i:代表基于Internet架构的数据库,如9i g:代表基于grid(网格)的数据库,如11g grid的目的:降低成本,提高服务质量,简化管理 Storage Grid:ASM(automatic storage management),继承了LVM技术,Oracl…

MySQL常用的库操作、表操作、INSERT、DELETE

库操作 查询数据库&#xff1a; show databases&#xff1b; 创建数据库&#xff1a; create database chat&#xff1b; 删除数据库&#xff1a; drop database chat&#xff1b; 选择数据库&#xff1a; use chat&#xff1b; 表操作 查询表&#xff1a; show tables&am…

OpenCompass 大模型评测作业(lesson 7)

书生浦语大模型实战系列文章目录 书生浦语大模型全链路开源体系发展历程和特点&#xff08;lesson 1&#xff09; 部署 InternLM2-Chat-1.8B&#xff08;lesson 2-1&#xff09; 部署八戒demo InternLM2-Chat-1.8B&#xff08;lesson 2-2&#xff09; 部署InternLM2-Chat-7B 模…

每日两题6

文章目录 删除并获得点数粉刷房子 删除并获得点数 分析 class Solution { public:int deleteAndEarn(vector<int>& nums) {const int N 10001;// 预处理int arr[N] {0};for (int& e : nums)arr[e] e;// 在 arr 上进行 打家劫舍 问题vector<int> f(N),…