题目描述
说实话确实比I & II要恶心一点 这里直接用双递归秒了(今天才发现我是之前先写的III,再写的I & II) 有前缀和的写法,但是懒得整了= =
思路 & 代码
和之前不同,这里对起点、终点不要求是根和叶子,只要求路径向下。 分成两种情况递归:路径包含当前结点,路径不包含当前结点。
class Solution { int ans = 0 ; public int pathSum ( TreeNode root, int targetSum) { if ( root == null ) { return 0 ; } pathSum ( root. right, targetSum) ; pathSum ( root. left, targetSum) ; bfs ( root, targetSum, 0 ) ; return ans; } void bfs ( TreeNode root, int targetSum, int nowNum) { if ( root == null ) { return ; } nowNum += root. val; if ( nowNum == targetSum) { ans++ ; } bfs ( root. left, targetSum, nowNum) ; bfs ( root. right, targetSum, nowNum) ; }
}
class Solution { int ans = 0 ; public int pathSum ( TreeNode root, int targetSum) { if ( root == null ) { return 0 ; } pathSum ( root. left, targetSum) ; pathSum ( root. right, targetSum) ; find ( root, targetSum) ; return ans; } public void find ( TreeNode root, int targetSum) { if ( root == null ) { return ; } if ( root. val == targetSum) { ans++ ; } find ( root. left, targetSum - root. val) ; find ( root. right, targetSum - root. val) ; }
}