题解 | #二叉树中是否存在节点和为指定值的路径#

二叉树中是否存在节点和为指定值的路径

http://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c

建议大家在做回溯的时候,尽量把回溯写出来,比如当前层--,回溯上一层就++,而不要把回溯
的步骤隐藏起来。
小技巧:
搜索的时候有无返回值的做法:

//1、当搜索整棵树的时候,那么递归函数一般是不需要有返回值,但是也有例外,比如
<1>
    TreeNode* left = dfs(root->left);
    TreeNode* right = dfs(root->right);
    if(判断左右的逻辑)...
<2>
    if(...)...
    node->left = dfs(root->left);
    node->right = dfs(root->right);
    return node;
//2、当搜索其中一条符合条件的路径,递归函数就需要及时返回,下面常见的做法
<1>
    if(dfs(root->left)) //及时返回
        return ...
    if(dfs(root->right))
        return ...
    return ...

题目题解

    bool dfs(TreeNode *root, int sum) {
        if(!root) //空节点的出口
            return false;
        if(root && !root->left && !root->right && sum == 0) //叶子节点出口
            return true;
        if(root->left) {
            sum -= root->left->val;
            if(dfs(root->left, sum)) //如果为true 说明找到结果  及时退出
                return true;
            sum += root->left->val; //回溯
        }
        if(root->right) {
            sum -= root->right->val;
            if(dfs(root->right, sum))
                return true;
            sum += root->right->val;
        }
        return false;
    }
    bool hasPathSum(TreeNode* root, int sum) {
        if(!root)
            return false;
        return dfs(root, sum-root->val); //上面的搜索是从根节点的子树开始搜索 需要把根节点减去
    }
全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 15:43
mamazi00:领导你好+小作文。就算给你涨薪,其实也是待不久了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务