题目
给定一个二叉树的根节点
root
,和一个整数targetSum
,求该二叉树里节点值之和等于targetSum
的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
解题思路
- 从每个节点开始向子节点遍历累加,当前达到目标值是结果加1;
- 方法一递归调用方法一;
- 方法二以当前节点的值为起始累加,符合结果则加1;
代码展示
class Solution {int ans = 0;int target;public int pathSum(TreeNode root, int targetSum) {target = targetSum;dfs1(root);return ans;}public void dfs1(TreeNode root){if(root == null){return;}dfs2(root,root.val);dfs1(root.left);dfs1(root.right);}public void dfs2(TreeNode root, long val){if(val == target) {ans++;} //不用else if避免存在先+后-或先-后+的情况,所以只要还存在子节点就需要遍历if (root.left != null) {dfs2(root.left, val + root.left.val);} if(root.right != null){dfs2(root.right, val + root.right.val);}}
}