/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int pathSum(TreeNode* root, int targetSum) {
if (!root) return 0; // 如果树为空,路径数量为0
// 路径总数 = 以当前节点为起点的路径数 + 左子树中的路径数 + 右子树中的路径数
return pathsFromNode(root, (long long)targetSum) +
pathSum(root->left, targetSum) +
pathSum(root->right, targetSum);
}
private:
// 计算以某个节点为起点,和为sum的路径数量
int pathsFromNode(TreeNode* node, long long sum) {
if (!node) return 0;
// 当前节点值是否等于剩余目标和
int count = (node->val == sum) ? 1 : 0;
// 继续向左右子树寻找,并更新剩余目标和
count += pathsFromNode(node->left, sum - node->val);
count += pathsFromNode(node->right, sum - node->val);
return count;
}
};
437. 路径总和 III
最新推荐文章于 2025-08-27 22:16:59 发布