随笔 - 112  文章 - 0  评论 - 0  阅读 - 1426

路径总和 III(递归)

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。

路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

 

示例 1:

输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示。

示例 2:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:3

 

复制代码
/**
 * 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:
    // 计算从当前节点开始的路径中和等于targetSum的个数。
    int rootSum(TreeNode* root, long long targetSum) {
        // 如果当前节点为空,则没有满足条件的路径,返回0。
        if (root == nullptr) return 0;

        int res = 0;
        // 如果当前节点的值正好等于目标和,则找到一条路径,结果加1。
        if (root->val == targetSum) ++res;

        // 递归计算左子树和右子树中,剩余和(targetSum - 当前节点值)相等的路径数,
        // 并将这些路径数累加到结果中。
        res += rootSum(root->left, targetSum - root->val);
        res += rootSum(root->right, targetSum - root->val);

        // 返回以当前节点为根的子树中所有满足条件的路径数。
        return res;
    }

    // 主函数:计算二叉树中所有和为目标值targetSum的路径数。
    int pathSum(TreeNode* root, long long targetSum) {
        // 如果树为空,则没有满足条件的路径,返回0。
        if (root == nullptr) return 0;

        // 计算从当前节点出发的所有路径中,和为目标值的数量。
        int res = rootSum(root, targetSum);

        // 对于左右子树,分别作为新的根节点,重复上述过程,
        // 寻找从这些节点出发的所有路径中,和为目标值的数量,并累加到结果中。
        res += pathSum(root->left, targetSum);
        res += pathSum(root->right, targetSum);

        // 返回整棵树中所有满足条件的路径数量。
        return res;
    }
};
复制代码

 

posted on   _月生  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示