437. Path Sum III

来源:互联网 发布:java内部类ppt 编辑:程序博客网 时间:2024/04/28 19:15

437. Path Sum III

You are given a binary tree in which each node contains an integer value.

Find the number of paths that sum to a given value.

The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).

The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.

Example:

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8      10     /  \    5   -3   / \    \  3   2   11 / \   \3  -2   1Return 3. The paths that sum to 8 are:1.  5 -> 32.  5 -> 2 -> 13. -3 -> 11

思路:dfs函数,从当前节点依次往下遍历,如果达到目标值,cnt++。dfs2函数:每个节点都要求得该节点的cnt数,最后所有节点的cnt的和就是最后的结果。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {    void dfs(TreeNode* root, int sum, int &cnt)    {        if(!root) return;        if(root->val==sum) cnt++;        TreeNode* l=root->left,*r=root->right;        dfs(l,sum-root->val,cnt);        dfs(r,sum-root->val,cnt);    }    void dfs2(TreeNode* root,int &sum,vector<int> & ans,int&cnt)    {        if(!root) return;         cnt=0;        dfs(root,sum,cnt);        ans.push_back(cnt);        TreeNode* l=root->left,*r=root->right;        dfs2(l,sum,ans,cnt);        dfs2(r,sum,ans,cnt);    }public:    int pathSum(TreeNode* root, int sum) {       vector<int> ans;int s=0,cnt=0;       dfs2(root,sum,ans,cnt);       for(int i:ans)       s+=i;       return s;    }};



0 0