LeetCode 112 路径总和

news2024/11/25 20:41:34

题目: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

示例 1:
在这里插入图片描述

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

示例 2:

在这里插入图片描述

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

思路:代码是按照自己的思路写的,可能复杂度有些高

首先将所有路径的结点之和保存到ValueTest函数的数组中,再调用test函数如果数组中有targetSum的值直接返回True,否则返回false。

class Solution {
public:
    // 函数名:hasPathSum,判断是否存在一条路径的和为targetSum
    // 参数1:root,二叉树的根节点指针
    // 参数2:targetSum,给定的目标值
    bool hasPathSum(TreeNode* root, int targetSum) {
        int sum=0; // 定义变量sum,记录当前路径的节点值之和
        vector<int> vec; // 定义向量vec,用于存储所有叶子节点到根节点路径上的节点值之和
        vector<int> res =  ValueTest(root,sum,vec); // 调用ValueTest函数,获取所有叶子节点到根节点路径上的节点值之和
        return test(res,targetSum); // 调用test函数,判断所有路径的节点值之和中是否有等于targetSum的
    }
    
    // 函数名:test,用于判断给定向量中是否存在等于result的元素
    // 参数1:vec,存储叶子节点到根节点路径上的节点值之和的向量
    // 参数2:result,需要查找的值
    bool test(vector<int> vec,int result) {
		for (vector<int>::iterator pos = vec.begin(); pos != vec.end();pos++) {
			if ((*pos) == result) return 1; // 若找到等于result的元素,返回true
		}
        return 0; // 若未找到等于result的元素,返回false
	}
    
    // 函数名:ValueTest,获取所有叶子节点到根节点路径上的节点值之和
    // 参数1:root,二叉树的根节点指针
    // 参数2:sum,记录当前路径的节点值之和
    // 参数3:vec,存储叶子节点到根节点路径上的节点值之和的向量
	vector<int> ValueTest(TreeNode* root, int sum, vector<int>& vec) {
		if (root != NULL) {
			sum += root->val; // 将当前节点的值加入sum
			if (root->left == NULL && root->right == NULL) {
				vec.push_back(sum); // 若当前节点为叶子节点,则将sum存入向量vec中
			}
			else {
				ValueTest(root->left, sum,  vec); // 若当前节点不为叶子节点,则递归遍历左右子树
				ValueTest(root->right, sum,  vec);
			}
		}
		return vec; // 返回存储所有叶子节点到根节点路径上的节点值之和的向量vec
	}
};

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

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

相关文章

Spring Boot概述(一)

1. SpringBoot 概述 1.1 SpringBoot 概念 SpringBoot提供了一种快速使用Spring的方式&#xff0c;基于约定优于配置的思想&#xff0c;可以让开发人员不必在配置与逻辑业务之间进行思维的切换&#xff0c;全身心的投入到逻辑业务的代码编写中&#xff0c;从而大大提高了开发的…

数字化时代,如何通过社媒找到外贸客户?

随着全球化的深入发展&#xff0c;外贸客户的开发变得越来越重要。而在如今的数字化时代&#xff0c;社交媒体已经成为了企业开发外贸客户的重要渠道之一。本文好选客小编将从选择社媒找外贸客户的原因和方法等方面&#xff0c;为您介绍如何通过社媒找到外贸客户。 图片出处&am…

洛谷P8706 [蓝桥杯 2020 省 AB1] 解码 C语言/C++

[蓝桥杯 2020 省 AB1] 解码 题目描述 小明有一串很长的英文字母&#xff0c;可能包含大写和小写。 在这串字母中&#xff0c;有很多连续的是重复的。小明想了一个办法将这串字母表达得更短&#xff1a;将连续的几个相同字母写成字母 出现次数的形式。 例如&#xff0c;连续…

【蓝桥杯省赛真题38】Scratch流星坠落 少儿编程scratch编程蓝桥杯省赛比赛真题讲解

目录 scratch流星坠落 一、题目要求 编程实现 二、案例分析 1、角色分析

vue3中使用swiper及遇到的问题

vue3中使用swiper 一、安装swiper二、使用swiper三、echarts+swiper一、安装swiper 使用npm install swiper安装swpier插件 npm install swiper -s // @9.2.0 // 或者安装指定版本 npm install swiper@8.4.7 -s二、使用swiper 直接按照官网的引用方法,项目会报错 解决方法:…

【复现论文】Looking here or there? Gaze Following in 360-Degree Images

【复现论文】Looking here or there? Gaze Following in 360-Degree Images 论文&#xff1a;Looking here or there? Gaze Following in 360-Degree Images 论文链接&#xff1a;Looking here or there? Gaze Following in 360-Degree Images 复现github链接&#xff1a…

List集合以及它的实现类和队列、栈

List集合 Collection层次的结构接口中&#xff0c;一些允许有重复的元素&#xff0c;例如&#xff1a;List接口。而另外一些不允许有重复的元素&#xff0c;例如&#xff1a;Set接口。其中也分为了有序与无序的&#xff08;存储顺序&#xff09;。 在JDK中没有提供Collection…

ppt文件太大怎么变小,这6种方式很简单

ppt文件太大怎么变小&#xff1f; ppt文件通常用于公司会议、教育授课和商务演讲等场合&#xff0c;由于需要实现各种文档效果并插入大量图片&#xff0c;因此文件大小要远大于普通文档文件&#xff0c;占用的存储空间也不少。如果电脑中存储了大量PPT文件&#xff0c;并且不方…

不服不行!盘点那些编程界的天才少年,11岁参加国际比赛,靠奖金赚了40万美金

程序员是一项专业性极强的工作&#xff0c;需要很强的思维能力和动手能力&#xff0c;所以大多数程序员要比普通人更聪明&#xff0c;与其他职业相比&#xff0c;程序员应该是最爱学习的一行了。科技网络的发展太快&#xff0c;新的技术层出不穷&#xff0c;时刻都要更新自己的…

L2-041 插松枝 判断量少(PTA 天梯赛)

人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始状态为空。每人面前有用不完的松枝干和一个推送器&#xff0c;每次推送一…

计算机组成原理第二章——数据的表示与运算(下)

提示&#xff1a;时光清浅处 一步一安然 文章目录前言2.3.1 浮点数的表示2.3.2 IEEE7542.2.3 浮点数的运算前言 本节主要讲三个问题&#xff0c;浮点数的表示&#xff0c;IEEE 754标准&#xff0c;浮点数的加减运算 2.3.1 浮点数的表示 浮点数的作用和基本原理 定点数可表示…

由浅入深了解HashMap源码

由经典面试题引入&#xff0c;讲解一下HashMap的底层数据结构&#xff1f;这个面试题你当然可以只答&#xff0c;HashMap底层的数据结构是由&#xff08;数组链表红黑树&#xff09;实现的&#xff0c;但是显然面试官不太满意这个答案&#xff0c;毕竟这里有一个坑需要你去填&a…

Java容器使用注意点

前置&#xff1a;问题 判空集合转map集合遍历集合去重集合转数组数组转集合 一&#xff1a;集合判空 《阿里巴巴 Java 开发手册》的描述如下&#xff1a; 判断所有集合内部的元素是否为空&#xff0c;使用 isEmpty() 方法&#xff0c;而不是 size()0 的方式。 我们在开发中也…

AI大模型突围战

最近&#xff0c;GPT赛道上争议不断&#xff0c;先是GPT-4的问世&#xff0c;用一些亮眼的功能让人类感叹自己是不是要丢工作&#xff1f;紧接着又有一封联名信刷屏&#xff0c;图灵奖得主、AI三巨头之一的约书亚本吉奥、埃隆马斯克等123个业界大佬&#xff0c;呼吁所有人工智能…

Vcpkg安装指定版本包或自定义安装包

文章目录前言寻找版本安装后话前言 windows一直用着vcpkg作为C跨平台开发的包管理&#xff0c;有些依赖要指定版本库&#xff0c;vcpkg目前最新的openssl版本是3.1.0&#xff0c;我想安装其他版本为例&#xff0c;开始本教程 寻找版本 以openssl举例&#xff0c;在vcpkg目录中…

react3:受控组件(表单默认变成受控)-组件通信 - typescript项目

受控组件&#xff1a;表单 非受控组件表单元素值不受所在组件状态的控制, 我们将这样的表单元素称作: 非受控组件. 受控组件受控组件 : 值受到 React 组件状态控制的表单元素一般是通过 defaultValue 属性, onChange 事件配合将非受控组件变为受控组件. 多表单元素操作 &#…

如果当前node.js版本和项目需要版本不一样,卸载重装其他版本node.js的方法

其实这种node.js版本不一样的问题&#xff0c;可以选择用nvm来管理node.js的不同版本。 此处仅总结卸载当前版本node.js重新安装所需版本node.js的方法 另&#xff1a;现在 用Vite官网里面的 yarn/npm等 的方法&#xff0c;创建Vue3项目——需要12版本的node.js 以下以本人 …

Vue3中readonly 与 shallowReadonly的使用区别?

文章目录前言readonly强行修改readonly&#xff1a;shallowReadonlyshallowReadonly强行修改结果&#xff1a;前言 readonly: 让一个响应式数据变为只读的&#xff08;深只读&#xff09;。 shallowReadonly&#xff1a; 让一个响应式数据变为只读的&#xff08;浅只读&#x…

真正好用的工业品ERP系统应该是什么样的?

一个好用的进销存ERP系统应该有以下特点&#xff1a; 1. 全面覆盖企业经营流程&#xff0c;包括采购、销售、库存、财务等模块&#xff0c;能够实现全方位的管理和控制。 2. 自定义配置&#xff0c;灵活地适应大多数用户的需求。 3. 数据精准、实时化&#xff0c;支持统计分…

基于CALMET诊断模型的高时空分辨率精细化风场模拟技术应用

【查看原文】气象数据相关分析及使用系列&#xff1a;基于CALMET诊断模型的高时空分辨率精细化风场模拟技术应用 在研究流场时&#xff0c;常用观测、模型风洞测试和数值模拟方法进行研究。但时常遇到研究区气象站点分布稀疏&#xff0c;不能代表周边复杂地形的风场。风洞模拟…