甄婉丽 发表于 2025-8-27 21:33:53

【LeetCode 437】算法:路径总和 III

题目:给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。
路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

核心思想:
这个问题的核心思想是深度优先搜索(DFS)结合递归。从二叉树的根节点开始,递归地遍历每个节点,并在遍历过程中计算从当前节点到任意叶子节点的路径和。如果路径和等于目标和 targetSum,则计数器加一。为了实现这一点,需要维护一个当前路径的和,并在遍历过程中更新它。
算法步骤:

[*]定义辅助函数:定义一个辅助函数 findPaths,它接受当前节点和目标和 targetSum 作为参数,用于计算以当前节点为起点,路径和为 targetSum 的路径数量。
[*]递归终止条件:如果当前节点为空,返回 0,因为没有路径。
[*]初始化计数器:对于每个节点,初始化计数器 count 为 0。
[*]检查叶子节点:如果当前节点是叶子节点(即没有左右子节点),检查当前节点的值是否等于 targetSum,如果是,则 count 加一。
[*]递归遍历子树:递归地调用 findPaths 函数遍历当前节点的左右子树,并将当前节点的值从 targetSum 中减去,因为路径和需要从当前节点开始计算。
[*]累加结果:在主函数 pathSum 中,递归地调用自身来遍历左子树和右子树,并将结果累加到 count 中。
[*]返回结果:返回 count 作为最终结果。
复杂度分析:
时间复杂度:O(N),其中 N 是二叉树中节点的数量。需要访问每个节点一次来计算路径和。
空间复杂度:O(H),其中 H 是二叉树的高度。这是因为递归调用的深度最多为树的高度。
Java代码实现:
class Solution {
    int count = 0;

    public int pathSum(TreeNode root, int targetSum) {
      if (root == null) {
            return 0;
      }
      count += findPaths(root, targetSum);
      count += pathSum(root.left, targetSum);
      count += pathSum(root.right, targetSum);
      return count;
    }

    private int findPaths(TreeNode node, int targetSum) {
      if (node == null) {
            return 0;
      }
      int count = 0;
      if (node.val == targetSum) {
            count++;
      }
      if (node.left != null) {
            count += findPaths(node.left, targetSum - node.val);
      }
      if (node.right != null) {
            count += findPaths(node.right, targetSum - node.val);
      }
      return count;
    }
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

句惫 发表于 2025-12-11 04:05:25

yyds。多谢分享

戟铵腴 发表于 2025-12-23 11:11:08

不错,里面软件多更新就更好了

蔺堰 发表于 2025-12-24 00:18:21

谢谢分享,辛苦了

呵烘稿 发表于 2026-1-17 16:29:03

谢谢分享,试用一下

挚魉 发表于 2026-1-17 21:03:22

感谢发布原创作品,程序园因你更精彩

缢闸 发表于 2026-1-20 15:15:18

感谢发布原创作品,程序园因你更精彩

宁觅波 发表于 2026-1-20 16:15:49

感谢分享,学习下。

明思义 发表于 2026-1-22 11:59:30

收藏一下   不知道什么时候能用到

懵诬哇 发表于 2026-1-22 22:10:23

谢谢楼主提供!

喙审 发表于 2026-1-23 08:38:33

收藏一下   不知道什么时候能用到

痨砖 发表于 2026-2-3 06:26:41

鼓励转贴优秀软件安全工具和文档!

溥价 发表于 2026-2-4 08:14:00

鼓励转贴优秀软件安全工具和文档!

溜椎干 发表于 2026-2-7 08:42:04

谢谢分享,试用一下

姨番单 发表于 2026-2-7 22:45:25

很好很强大我过来先占个楼 待编辑

士沌 发表于 2026-2-8 13:16:11

收藏一下   不知道什么时候能用到

炳裘垦 发表于 2026-2-9 00:10:46

鼓励转贴优秀软件安全工具和文档!

嫁吱裨 发表于 2026-2-9 17:22:18

不错,里面软件多更新就更好了

全叶农 发表于 2026-2-9 17:37:04

谢谢分享,辛苦了

膏包 发表于 2026-2-10 02:41:58

用心讨论,共获提升!
页: [1] 2
查看完整版本: 【LeetCode 437】算法:路径总和 III