版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
想法是递归到所有结点就算一次,其实第一次交的时候超时了,之后可能是网速问题竟然成功了。。。
这题写得不好,之后再改改
/**
* 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 {
public:
int pathSum(TreeNode* root, int sum) {
int ans = 0;
cir(root,ans,sum);
return ans;
}
void cir(TreeNode* root,int & ans,int sum)
{
int tmp = 0;
if(root)
{
getSum(root,tmp,ans,sum);
cir(root->left,ans,sum);
cir(root->right,ans,sum);
}
}
void getSum(TreeNode* q,int& tmp, int& ans,int sum)
{
tmp += q->val;
//cout<<tmp<<endl;
if(tmp == sum)
{
ans++;
}
if(q->left)
{
getSum(q->left,tmp,ans,sum);
tmp-=q->left->val;
}
if(q->right)
{
getSum(q->right,tmp,ans,sum);
tmp-=q->right->val;
}
}
};