一、题目
* 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。
* 判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum 。
* 如果存在,返回 true ;否则,返回 false 。
* 叶子节点 是指没有子节点的节点。
二、思路:
* 1 深度优先搜索,前序访问,valSum保存当前路径总和,用一个ArrayList保存最终结果
* 2 因此整体思路就是,访问root先valSum += root.val。
* 3 然后判断是否为叶子节点,是叶子节点就把当前的valSum追加到ArrayList。
* 4 不是叶子节点,仅当存在左(右)孩子的时候再递归左(右)子树。
* 5 最终拿targetSum和ArrayList各元素比较。
三、代码
class Solution {
private List<Integer> resList = new ArrayList<>();
public void dfs(TreeNode root, int valSum) {
valSum += root.val;
if (root.left == null && root.right == null) {
this.resList.add(valSum);
return;
}
if (root.left != null) dfs(root.left, valSum);
if (root.right != null) dfs(root.right, valSum);
return;
}
public boolean hasPathSum(TreeNode root,int targetSum) {
if (root == null ) return false;
int valSum = 0;
dfs(root, valSum);
boolean res = this.resList.contains(targetSum);
return res;
}
}