首页 > 其他分享 >力扣 112. 路径总和

力扣 112. 路径总和

时间:2022-10-31 16:12:07浏览次数:93  
标签:right TreeNode cur 力扣 targetSum 112 left 节点 总和

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

题解

使用递归求解,注意必须根节点到叶子节点

查看代码
 /**
 * 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:
    bool res=false;
    void work(TreeNode* cur, int& targetSum,int curSum){//curSum记录当前和
        if(curSum==targetSum&&cur->left==NULL&&cur->right==NULL){//相等且是叶子节点
            res=true;
            return;
        }
        if(cur->left)//因为val有负数,所以没办法剪枝
            work(cur->left,targetSum,curSum+cur->left->val);
        if(cur->right)
            work(cur->right,targetSum,curSum+cur->right->val);
    }
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(root==NULL)
            return res;
        work(root,targetSum,root->val);
        return res;
    }
};

标签:right,TreeNode,cur,力扣,targetSum,112,left,节点,总和
From: https://www.cnblogs.com/fudanxi/p/16844669.html

相关文章

  • mac版 AutoCAD(LT)安装失败,提示错误“Error 112”的解决方法
    很多网友反映,第一次安装AutoCAD(LT)2022或者2023的时候都能成功,但是有问题卸载后,想要重装时,安装到一定进度后,进度条会回退到0,然后提示安装失败,错误Error112。,这种情况如何......
  • 力扣HOT100算法题5:最长回文字串
    文章目录​​一、题目​​​​二、方法一:解题思路​​​​三、方法一:代码解析​​​​四、方法二:动态规划​​​​五、方法二:代码解析​​一、题目给你一个字符串s,找到s......
  • UVA11297 Census(kd-tree)
    题意:给定一个\(n\timesn\)的网格,要求支持修改和询问某个矩阵的最大值和最小值。解法多样,可以用二维线段树,我用的是\(kd-tree\)。那么这题就很裸了,我在这里只提几点需......
  • 力扣 889. 根据前序和后序遍历构造二叉树
    889.根据前序和后序遍历构造二叉树给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的......
  • 力扣 105. 从前序与中序遍历序列构造二叉树
    105.从前序与中序遍历序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树......
  • 六六力扣刷题双指针之三数之和
    前言之前小六六一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两天晒网,刷几天,然后就慢慢的不坚持了,所以这次,借助平台的活动,打算慢慢的开始开刷,并且自己还......
  • 六六力扣刷题双指针之链表相交
    前言之前小六六一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两天晒网,刷几天,然后就慢慢的不坚持了,所以这次,借助平台的活动,打算慢慢的开始开刷,并且自己还......
  • 力扣784(java)-字母大小写全排列(中等)
    题目:给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。以任意顺序返回输出。 示例1:输......
  • leetcode(力扣) 78. 子集(回溯 & 巧妙解法)
    文章目录​​题目描述​​​​法一(巧妙暴力解)​​​​思路分析​​​​完整代码​​​​法二(回溯):​​​​思路分析​​​​完整代码​​题目描述给你一个整数数组nums......
  • leetcode(力扣) 491. 递增子序列(回溯 & 去重思路)
    文章目录​​题目描述​​​​思路分析​​​​完整代码​​题目描述给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。你可以......