程式語言 - LeetCode - C - 437. Path Sum III



參考資訊:
https://www.cnblogs.com/grandyang/p/6007336.html

題目:


解答:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int travel(struct TreeNode *n, int *s_buf, int *s_idx, int *cnt, long sum, int target)
{
    long cc = 0;
    long tmp = 0;

    if (!n) {
        return 0;
    }

    sum += n->val;
    if (sum == target) {
        (*cnt) += 1;
    }

    tmp = sum;
    s_buf[*s_idx] = n->val;
    for (cc = 0; cc < *s_idx; cc++) {
        tmp -= s_buf[cc];
        if (tmp == target) {
            (*cnt) += 1;
        }
    }

    (*s_idx) += 1;
    travel(n->left, s_buf, s_idx, cnt, sum, target);
    travel(n->right, s_buf, s_idx, cnt, sum, target);
    (*s_idx) -= 1;

    return 0;
}

int pathSum(struct TreeNode *root, int targetSum)
{
    int r = 0;
    int idx = 0;
    int buf[1001] = { 0 };

    travel(root, buf, &idx, &r, 0, targetSum);
    return r;
}