路径总和 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; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探