/**
* 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。
*
* 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
*
* 参考链接: https://leetcode.cn/problems/path-sum-iii/?envType=study-plan-v2&envId=leetcode-75
*/
public class PathSum {
/**
* 题解:
* 1.pathSum() 函数: 以当前函数的输入值作为起始节点
* 2. rootSum()函数:主要判断当前节点是否可以作为终结点
* @param root
* @param targetSum
* @return
*/
public int pathSum(TreeNode root, int targetSum) {
if (root == null) {
return 0
}
int ret = rootSum(root, Long.valueOf(targetSum))
ret += pathSum(root.left, targetSum)
ret += pathSum(root.right, targetSum)
return ret
}
public int rootSum(TreeNode root, Long targetSum) {
int ret = 0
if (root == null) {
return 0
}
if (root.val == targetSum) {
ret++
}
ret += rootSum(root.left, Long.valueOf(targetSum - root.val))
ret += rootSum(root.right, Long.valueOf(targetSum - root.val))
return ret
}
class TreeNode {
int val
TreeNode left
TreeNode right
TreeNode() {}
TreeNode(int val) { this.val = val
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val
this.left = left
this.right = right
}
}
}