* struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    bool hasPathSum(TreeNode* root, int sum) {
        // write code here
        if(!root){
            return false; //如果根为空,直接返回false
        }
        if(root->val == sum && root->left == nullptr && root->right == nullptr){
            return true; //根结点正好等于sum 并且左右子树都为空,说明找到最后一层(叶子结点)满足当前的路径和。
        }
        // 继续递归左子树或者右子树,只要能满足这种情况就为true, 此时递归到后面,就要跟着减去根的值 直到找到某个叶子结点的值正好等于传入的(还差的值)sum.
        return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right,sum - root->val);
    }
};