1.题目
您将获得一个二叉树,其中每个节点都包含一个整数值。
找到相加和为sum的路径数。
路径不需要在根或叶子处开始或结束,但必须向下(仅从父节点行进到子节点)。
2.思路
每个节点node都有三种方案:
- 以node为根,合为sum的路径数;
- 以node->left为根,合为sum的路径数;
- 以node->right为根,合为sum的路径数;
递归执行上述步骤
3.实现
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
if(root == nullptr)
return 0;
return helper(root, sum) + pathSum(root->left, sum) + pathSum(root->right, sum);
}
int helper(TreeNode* root, int left)
{
// 在以node为根节点的二叉树中,寻找和为left的路径。
// 返回这样路径的个数
if(root == nullptr)
return 0;
return (root->val - left == 0 ? 1 : 0) +
helper(root->left, left - root->val) + helper(root->right, left - root->val);
}
};