胡扯:这个题的确见证了我的进步,连续刷了几天的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;
    }
}