二叉树中和为某一值的路径(一):最直观的想法是,因为要找从根节点到叶子节点的路径,故直接采用前序遍历即可。当当前节点为空节点则直接返回false,反之当当前结点为叶子节点即当前节点不为空但是当前节点的左右子树均为空并且当前节点值等于给定值则表明当前路径满足要求故返回true。接着依次遍历当前左或右子树找目标和为给定值减去当前节点值的路径是否存在并返回即可。

bool dfs(TreeNode* root, int sum)
{
    // 一定加上这句 即当前节点为空 直接返回false 因为一定是前面不满足才继续调用的
    if(!root)
       return false;
    // 叶子结点且其值等于给定求和
    if(root && !root->left && !root->right && root->val==sum)
       return true;
    // 如果在这里加上叶子结点且其值不等于给定和返回false只是一部分 没有给定单亲结点的情况
    bool left = dfs(root->left,sum-root->val);
    bool right = dfs(root->right,sum-root->val);
    return left || right;
}
bool hasPathSum(TreeNode* root, int sum) 
{
    // 空数返回false
    if(!root)
      return false;
    return dfs(root,sum);
}