437. Path Sum III
重点是分成两部分,一部分是包含root的路径,另一部分是不包含的。
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
if( root == NULL )
return 0;
return findPath( root , sum )
+ pathSum( root->left , sum )
+ pathSum( root->right , sum );
}
private:
int findPath( TreeNode* node, int num){
if( node == NULL )
return 0;
int res = 0;
if( node->val == num )
res += 1;
res += findPath( node->left , num - node->val );
res += findPath( node->right , num - node->val );
return res;
}
};
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
if (!root) return 0;
return sumUp(root, 0, sum) + pathSum(root->left, sum) + pathSum(root->right, sum);
}
int sumUp(TreeNode* node, int pre, int& sum) {
if (!node) return 0;
int cur = pre + node->val;
return (cur == sum) + sumUp(node->left, cur, sum) + sumUp(node->right, cur, sum);
}
};