解题思路:

这道题目本质上还是前序遍历的变种,通过前序遍历过程中,用(sum - root.val ==0 )&& 是否是叶子节点,获得到答案的!

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 这道题就是前序遍历的一种变种
     * 思路:遍历
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    public boolean hasPathSum (TreeNode root, int sum) {
        // 空节点返回false
        if(root ==null) {
            return false;
        }
        // 找到叶子节点,返回true
        if(root.left==null && root.right==null && (sum - root.val==0)) {
            return true;
        }
        // sum值减去当前节点值后,再递归减去下层节点值
        return hasPathSum(root.left, sum - root.val)|| hasPathSum(root.right, sum - root.val);
    }
}