和为sum的路径

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tlzhatao/article/details/84331933
  1. 和为sum的路径I
/**
 * 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:
    bool hasPathSum(TreeNode* root, int sum) {
        if(root == NULL)
            return false;
        if(root->left == NULL && root->right == NULL && sum - root->val == 0)
            return true;
        return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val);
    }
};
  1. 和为sum的路径II
/**
 * 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:
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        vector<vector<int>> result;
        vector<int> path;
        if(root == NULL)
            return result;
        pathSum(root, sum, path, result);
        return result;
    }
private:
    void pathSum(TreeNode* root, int sum, vector<int> &path, vector<vector<int>> &result)
    {
        if(root == NULL)
            return;
        path.push_back(root->val);
        if(root->left == NULL && root->right == NULL && sum - root->val == 0)
        {
            result.push_back(path);
        }
        else
        {
            pathSum(root->left, sum - root->val, path, result);
            pathSum(root->right, sum - root->val, path, result);
        }
        path.pop_back();
    }
};
  1. 和为sum的路径III
/**
 * 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 == NULL)
            return 0;
        return findPath(root, 0, sum) + pathSum(root->left, sum) + pathSum(root->right, sum);
    }
private:
    int findPath(TreeNode* root, int cur, int &sum)
    {
        if(root == NULL)
            return 0;
        return ((cur + root->val == sum) ? 1: 0) + findPath(root->left, cur + root->val, sum) + findPath(root->right, cur + root->val, sum);
    }
};
/**
 * 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 count = 0;
        vector<int> path;
        if(root != NULL)
            pathSum(root, 0, sum, count, path);
        return count;
    }
private:
    void pathSum(TreeNode* root, int cur_sum, int &sum, int &count, vector<int> &path)
    {
        if(root == NULL)
            return;
        path.push_back(root->val);
        if(cur_sum + root->val == sum)
            count++;
        int tmp = cur_sum + root->val;
        for (int i = 0; i < path.size() - 1; i++) 
        {
            tmp -= path[i];
            if (tmp == sum)
                count++;
        } 
        pathSum(root->left, cur_sum + root->val, sum, count, path);
        pathSum(root->right, cur_sum + root->val, sum, count, path);
        path.pop_back();
    }
};

猜你喜欢

转载自blog.csdn.net/tlzhatao/article/details/84331933