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

embedded/2024/11/15 6:09:27/

题目

简单

给你二叉树的根节点 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.ppmy.cn/embedded/34537.html

相关文章

【MySQL】第一次作业

【MySQL】第一次作业 1、在官网下载安装包2、解压安装包&#xff0c;创建一个dev_soft文件夹&#xff0c;解压到里面。3、创建一个数据库db_classes4、创建一行表db_hero5、将四大名著中的常见人物插入这个英雄表 写一篇博客&#xff0c;在window系统安装MySQL将本机的MySQL一定…

第 129 场 LeetCode 双周赛题解

A 构造相同颜色的正方形 枚举&#xff1a;枚举每个 3 3 3\times 3 33的矩阵&#xff0c;判断是否满足条件 class Solution {public:bool canMakeSquare(vector<vector<char>>& grid) {for (int i 0; i < 2; i)for (int j 0; j < 2; j) {int c1 0, c…

sql编写规范(word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目的 2 SQL书写规范 3 SQL编写原则 软件全套资料获取进主页或者本文末个人名片直接获取。

四、VGA项目:联合精简帧+双fifo+sobel算法 实现VGA显示

前言&#xff1a;该项目实际上是在很多基础的小练习上合成起来的&#xff0c;例如涉及到uart&#xff08;rs232&#xff09;的数据传输、双fifo流水线操作、VGA图像显示&#xff0c;本次内容在此基础上又增添了sobel算法&#xff0c;能实现图像的边沿监测并VGA显示。 文章目录…

Python中的魔法方法

Python中的魔法方法 讲解&#xff1a; 1. __new__方法&#xff1a; __new___方法是在创建实例之前进行调用的&#xff0c;返回的是一个对象。 2. __init__方法&#xff1a; __init__方法是在创建实例后的初始化方法&#xff0c;是创建实例后直接调用的方法。 3. __call__…

Python实战开发及案例分析(5)—— 贪心算法

贪心算法是一种在每一步选择中都采取当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法不能保证得到最优解&#xff0c;但在某些问题中非常有效&#xff0c;并容易实现。 案例分析&#xff1a;找零问…

快速幂笔记

快速幂即为快速求出一个数的幂&#xff0c;这样可以避免TLE&#xff08;超时&#xff09;的错误。 传送门&#xff1a;快速幂模板 前置知识&#xff1a; 1) 又 2) 代码&#xff1a; #include <bits/stdc.h> using namespace std; int quickPower(int a, int b) {int…

刘邦与秦始皇嬴政只差3岁,嬴政运筹帷幄的时候,刘邦在干什么?

秦王为人&#xff0c;蜂准&#xff0c;长目&#xff0c;挚鸟膺&#xff0c;豺声&#xff0c;少恩而虎狼心&#xff0c;居约易出人下&#xff0c;得志亦轻食人。我布衣&#xff0c;然见我常身自下我。诚使秦王得志于天下&#xff0c;天下皆为虏矣。不可与久游。——尉缭 秦昭襄…