详细思路

dfs,参数root和targetsum,求出root树是否有路径和为targetsum的
 
精确定义
dfs,参数root和targetsum,求出root树是否有路径和为targetsum,haveTarget为true提前返回,叶节点边界返回,最后返回需要分情况一个儿子和两个儿子
class Solution {
public:
    bool haveTarget;
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(!root)return false;
        haveTarget=false;
        return dfs(root,targetSum);
    }
    bool dfs(TreeNode*root,int targetSum){
        if(haveTarget)return true;
        if(!root->left&&!root->right){
            if(root->val==targetSum){
                haveTarget=true;
                return true;
            }
            else return false;
        }
        int newTarget=targetSum-root->val;
        if(root->left&&!root->right)return dfs(root->left,newTarget);
        else if(!root->left&&root->right)return dfs(root->right,newTarget);
        return dfs(root->left,newTarget)||dfs(root->right,newTarget);

    }
};
踩过的坑
根结点不是叶节点,也就是说,[1,2] 1      是找不到的,不能说1是一条根结点到叶节点的,简单的方法是只能到叶节点就是边界,不能到空节点。
posted on 2021-08-02 09:13  offer快到碗里来~  阅读(29)  评论(0)    收藏  举报