Leetcode 437. Path Sum III
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
return 3.
题目大意:
给定一棵二叉树,返回路径和等于sum的路径数,路径方向只能从父到子。
解题思路:
我们可以用递归来做,相当于先序遍历二叉树,对于每一个节点都有记录了一条从根节点到当前节点到路径,同时用一个变量 cur 记录路径节点总和,然后我们看 cur 和 sum 是否相等,相等的话结果加1
代码:
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);
}
private:
int sumUp(TreeNode* root, int pre, int& sum){
if(!root) return 0;
int cur = pre + root->val;
return (cur == sum) + sumUp(root->left, cur, sum) + sumUp(root->right, cur, sum);
}
};