栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 437. 路径总和 III 二叉树前缀和 回溯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 437. 路径总和 III 二叉树前缀和 回溯

对于一维,我们维护一维数组的前缀和,要求某一段相加和为sum在i前出现几次,
就是求前缀和数组 s[i] - s[j] == sum,的点有几个,其中j+1 ∈[1, i]。
用这个思路用在二维数组,用一个哈希表来维护之前节点出现的前缀和的次数即可,当前遍历到的节点是s[i], 哈希表里装着的是s[j]的出现次数:s[j] = s[i] - sum。

记得加入是s[0] = 0,以及数据太大用long long

class Solution {
public:
unordered_map m;
long long res = 0;
    int pathSum(TreeNode* root, int sum) {
        m[0]++;
        dfs(root, sum, 0);
        return res;
    }
    void dfs(TreeNode* root, int sum, long long cur) {
        if (!root) return;
        cur += root->val;
        res += m[cur - sum];
        m[cur]++;
        dfs(root->left, sum, cur), dfs(root->right, sum, cur);
        m[cur]--; 
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931666.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号