Monday, February 24, 2020

437. Path Sum III (easy)

Q:

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   1

Return 3. The paths that sum to 8 are:

1.  5 -> 3
2.  5 -> 2 -> 1
3. -3 -> 11

A:

这个是错的,具体是为什么呢? 答案看最下方
/**
 * 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) {
        if(!root)
            return 0;
        
        int endHere = sum == root->val? 1:0;
        return pathSum(root->left, sum-root->val) + 
               pathSum(root->right, sum-root->val) + 
               pathSum(root->left, sum) + 
               pathSum(root->right, sum) + endHere;
    }
};





my real solution:
/**
 * 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) {
        if(!root)
            return 0;
        
        return pathSum(root->left, sum) + 
               pathSum(root->right, sum) + 
               directSum(root,sum);
    }
private:
    int directSum(TreeNode* root, int sum)
    {
        if(!root)
            return 0;
        int endHere = sum==root->val?1:0;
        return directSum(root->left, sum-root->val) + directSum(root->right, sum-root->val) + endHere;
    }
};









































为啥错呢?   因为在递归的时候,把一些路径计算了2次。

No comments:

Post a Comment