您的位置:首页 > 其它

LeetCode "437. Path Sum III"

2017-01-28 14:44 513 查看
The punch line of this one: sum of leaves: pi..pj = root..pj - root..pi.

/**
* 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 {
int ret;
void go(TreeNode *p, int sofar, int tgt, unordered_map<int, unsigned> rec)
{
if(!p) return;

sofar += p->val;
if(sofar == tgt)
{
ret ++; // case 1 : from root
}

int t = sofar - tgt;
if(rec.find(t) != rec.end())
{
ret += rec[t];
}

rec[sofar] ++;
go(p->left, sofar, tgt, rec);
go(p->right,sofar, tgt, rec);
}
public:
int pathSum(TreeNode* root, int sum)
{
ret = 0;
if(!root) return 0;

go(root, 0, sum, unordered_map<int, unsigned>());
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: