胡扯:这个题的确见证了我的进步,连续刷了几天的dfs了,从开始的不知如何下手,到这个一次提交以打败 100% 通过,开心。
思路:
1、日常非空判断
2、遍历求和。
3、如果是叶子节点就判断当前节点的和,是否等于 所求的和
代码: 可以打开下面的注释 查看每一个节点的和
class Solution {
boolean flag = false;
int total = 0;
void dfs (TreeNode root,int current){
// System.out.println(root.val + " : " + current);
if ( root.left == null && root.right == null ){ //判断是不是叶子节点
if (current == total)
flag = true;
}
if (root.left != null)
dfs(root.left,current + root.left.val);
if (root.right != null)
dfs(root.right,current + root.right.val);
}
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null)
return false;
total = sum;
dfs(root,root.val);
return flag;
}
}