力扣每日一题112:路径总和

题目

简单

给你二叉树的根节点 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
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

提示:

  • 树中节点的数目在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

面试中遇到过这道题?

1/5

通过次数

676K

提交次数

1.2M

通过率

54.2%

方法一:深度优先搜索

用一个数字记录路径上的数字和,遍历到叶节点时,判断和是否等于target。

class Solution {
public:bool dfs(TreeNode *root,int targetSum,int sum){if(!root) return false;else if(!root->left&&!root->right) return sum+root->val==targetSum; else return ( dfs(root->left,targetSum,sum+root->val)||dfs(root->right,targetSum,sum+root->val) );}bool hasPathSum(TreeNode* root, int targetSum) {if(!root) return false;return dfs(root,targetSum,0);}
};

方法二:广度优先搜索

我没用这个方法,下面是官解。

首先我们可以想到使用广度优先搜索的方式,记录从根节点到当前节点的路径和,以防止重复计算。

这样我们使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和即可。

这个方法相比深度优先搜索更麻烦,而且空间复杂度也高一点。

class Solution {
public:bool hasPathSum(TreeNode *root, int sum) {if (root == nullptr) {return false;}queue<TreeNode *> que_node;queue<int> que_val;que_node.push(root);que_val.push(root->val);while (!que_node.empty()) {TreeNode *now = que_node.front();int temp = que_val.front();que_node.pop();que_val.pop();if (now->left == nullptr && now->right == nullptr) {if (temp == sum) {return true;}continue;}if (now->left != nullptr) {que_node.push(now->left);que_val.push(now->left->val + temp);}if (now->right != nullptr) {que_node.push(now->right);que_val.push(now->right->val + temp);}}return false;}
};

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

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

相关文章

fork后如何同步最新的代码

1.查看自己的库并添加远程源库 #查看所有远程库的url git remote -v; #添加源项目url&#xff08;upstream是自己定义的一个名字&#xff0c;可以删 git remote remove upstream&#xff09; git remote add upstream 这里替换为源项目url; #查看所有远程库的url&…

电商API接口详解(二)【返回主流电商平台商品详情SKU数据】

一、API接口规范 1.协议&#xff1a;API与客户端用户的通信协议&#xff0c;推荐使用http协议&#xff0c;同时兼容HTTP&#xff0c;以确保交互数据的传输安全。 2.域名&#xff1a;应该尽量将API部署在专用域名之下。http://api.xxx.com 如果确定API很简单&#xff0c;不会…

P3743 小鸟的设备

原题链接&#xff1a;小鸟的设备 - 洛谷 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 浮点数二分答案。 首先特判&#xff0c;如果接通设备每秒生成的能量p大于等于所有设备每秒消耗的能量&#xff08;a[1]a[2]..a[n]&#xff09;直接输出-1&…

liunx服务器部署Llama2大模型

模型&#xff1a;Llama2-chat-13B-Chinese-50W 01 下载安装 Llama2 模型 Huggingface在国内是访问不了的&#xff0c;需要使用代理。在这里推荐使用 clash-for-liunx 配置代理。 安装 git-lfs&#xff0c;用于大文件下载 sudo apt-get install git-lfs git lfs installHuggi…

鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步

基本概念 信号量&#xff08;Semaphore&#xff09; 是一种实现任务间通信的机制&#xff0c;可以实现任务间同步或共享资源的互斥访问。 一个信号量的数据结构中&#xff0c;通常有一个计数值&#xff0c;用于对有效资源数的计数&#xff0c;表示剩下的可被使用的共享资源数…

数据交换和异步请求(JSONAjax))

目录 一.JSON介绍1.JSON的特点2.JSON的结构3.JSON的值JSON示例4.JSON与字符串对象转换5.注意事项 二.JSON在Java中的使用1.Javabean to json2.List to json3.Map to JSONTypeToken底层解析 三.Ajax介绍1.介绍2.Ajax经典应用场景 四.Ajax原理示意图1. 传统web应用2.Ajax方法 五.…

RockChip Android13 NFC SL6320移植

环境:RK3568 Android13 一:驱动移植 1、驱动 将SL6320驱动代码拷贝至kernel-5.10/drivers/misc/sl6320/ 特殊说明:勿将驱动代码放置于kernel-5.10/drivers/nfc/目录下,会导致sl6320驱动生成设备节点时因/dev/nfc节点以创建而加载失败。 2、DTS 本次硬件设计电路走I2C协…

CWDM、DWDM、MWDM、LWDM:快速了解光波复用技术

在现代光纤通信领域&#xff0c;波分复用&#xff08;WDM&#xff09;技术作为一项先进的创新脱颖而出。它通过将多个不同波长和速率的光信号汇聚到一根光纤中来有效地传输数据。本文将深入探讨几种关键的 WDM 技术&#xff08;CWDM、DWDM、MWDM 和 LWDM&#xff09;&#xff0…

深度学习中的归一化:BN,LN,IN,GN的优缺点

目录 深度学习中归一化的作用常见归一化的优缺点 深度学习中归一化的作用 加速训练过程 归一化可以加速深度学习模型的训练过程。通过调整输入数据的尺度&#xff0c;归一化有助于改善优化算法的收敛速度。这是因为归一化后的数据具有相似的尺度&#xff0c;使得梯度下降等优化…

微信小程序修改radio的样式,以及获取radio选择的值(自定义radio样式)

博主介绍&#xff1a;本人专注于Android/java/数据库/微信小程序技术领域的开发&#xff0c;以及有好几年的计算机毕业设计方面的实战开发经验和技术积累&#xff1b;尤其是在安卓&#xff08;Android&#xff09;的app的开发和微信小程序的开发&#xff0c;很是熟悉和了解&…

谷歌推广和seo留痕具体怎么操作?

留痕跟谷歌推广其实是一回事&#xff0c;你能在谷歌上留痕&#xff0c;其实就是推广了自己的信息&#xff0c;本质上留痕就是在各大网站留下自己的记录&#xff0c;这个记录可以是品牌信息&#xff0c;联系方式&#xff0c;看你想留下什么 如果要问自己怎么操作&#xff0c;正常…

C++基础理论学习

一、常量及符号 常量就是在程序运行过程中不可以改变的数值。例如&#xff0c;每个人的身份证号码就是一常量&#xff0c;是不能被更改的。常量可分为整型常量、浮点型常量、字符常量和字符串常量。 上面的代码通过com输出4行内容&#xff0c;cot是输出流&#xff0c;实现输出…