leetcode-437:路径总和 III

简介: leetcode-437:路径总和 III

题目

题目连接

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。

路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

示例 1:

输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示。

示例 2:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:3

解题

方法一:暴力回溯

遍历每个节点作为起始节点,都进行dfs回溯搜索

class Solution {
public:
    int res=0;
    void dfs(TreeNode* cur,int64_t targetSum){
        if(!cur) return;
        targetSum-=cur->val;
        if(targetSum==0) res++;
        dfs(cur->left,targetSum);
        dfs(cur->right,targetSum);
    }
    int pathSum(TreeNode* root, int targetSum) {
        if(!root) return 0;
        dfs(root,targetSum);
        pathSum(root->left,targetSum);
        pathSum(root->right,targetSum);
        return res;
    }
};

方法二:前缀和

参考链接

class Solution {
public:
    int targetSum;
    int res=0;
    unordered_map<int64_t,int> mp;
    int pathSum(TreeNode* root, int targetSum) {
        if(!root) return 0;
        this->targetSum=targetSum;
        mp[0]=1;
        dfs(root,root->val);
        return res;
    }
    void dfs(TreeNode* root,int64_t val){
        if(mp.count(val-targetSum)) res+=mp[val-targetSum];
        mp[val]++;
        if(root->left) dfs(root->left,val+root->left->val);
        if(root->right) dfs(root->right,val+root->right->val);
        mp[val]--;
    }
};
相关文章
|
2月前
【LeetCode 35】112.路径总和
【LeetCode 35】112.路径总和
28 0
|
5月前
|
算法 Unix 测试技术
力扣经典150题第五十二题:简化路径
力扣经典150题第五十二题:简化路径
48 0
|
2月前
【LeetCode 36】113.路径总和II
【LeetCode 36】113.路径总和II
30 0
|
4月前
|
机器人 Python
【Leetcode刷题Python】62. 不同路径
LeetCode 62题 "不同路径" 的Python解决方案,使用动态规划算法计算机器人从网格左上角到右下角的所有可能路径数量。
74 0
|
6月前
|
存储 SQL 算法
LeetCode题目113:多种算法实现 路径总和ll
LeetCode题目113:多种算法实现 路径总和ll
|
2月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
22 0
|
4月前
|
Python
【Leetcode刷题Python】113. 路径总和 II
LeetCode上113号问题"路径总和 II"的Python实现,通过深度优先搜索来找出所有从根节点到叶子节点路径总和等于给定目标和的路径。
43 3
【Leetcode刷题Python】113. 路径总和 II
|
4月前
|
存储 Python
【Leetcode刷题Python】64. 最小路径和
一种使用动态规划解决LeetCode上64题“最小路径和”的Python实现方法,通过维护一个一维数组来计算从网格左上角到右下角的最小路径总和。
33 1
【Leetcode刷题Python】64. 最小路径和
|
4月前
|
存储 算法 Linux
LeetCode第71题简化路径
文章讲述了LeetCode第71题"简化路径"的解题方法,利用栈的数据结构特性来处理路径中的"."和"..",实现路径的简化。
LeetCode第71题简化路径
|
4月前
|
算法
LeetCode第64题最小路径和
LeetCode第64题"最小路径和"的解题方法,运用动态规划思想,通过构建一个dp数组来记录到达每个点的最小路径和,从而高效求解。
LeetCode第64题最小路径和