ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode112_路经总和

2022-03-06 13:35:39  阅读:163  来源: 互联网

标签:路经 right return leetcode112 true targetSum null root 总和


题目链接:
这是一道典型的,只需要对部分树进行搜索的题目,那么递归函数的返回值不能为void而为true。
还有一个技巧,为了处理方便不用进行求和,而是做减法即可。

递归1.0

class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root == null) return false;
        return dfs(root, targetSum-root.val);
    }
    private boolean dfs(TreeNode root, int targetSum) {
        if(root.left == null && root.right == null) {
            if(targetSum == 0) return true;
        }
        if(root.left != null) {
            if(dfs(root.left, targetSum-root.left.val)) return true;
        }
        if(root.right != null) {
            if(dfs(root.right, targetSum-root.right.val)) return true;
        }
        return false;
    }
}

递归2.0

发现dfs函数和主函数签名一样,那么可以精简到一个函数:

class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root == null) return false;
        targetSum -= root.val;
        if(root.left == null && root.right == null) {
            if(targetSum == 0) return true;
        }
        if(root.left != null) {
            if(hasPathSum(root.left, targetSum)) return true;
        }
        if(root.right != null) {
            if(hasPathSum(root.right, targetSum)) return true;
        }
        return false;
    }
}

递归3.0

发现在开头和单层逻辑体里都判断了null,可以精简

class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root == null) return false;
        targetSum -= root.val;
        if(root.left == null && root.right == null) {
            if(targetSum == 0) return true;
        }
        if(hasPathSum(root.left, targetSum)) return true;
        if(hasPathSum(root.right, targetSum)) return true;
        return false;
    }
}

递归4.0

还可以发现最后三局还可以用短路运算逻辑符||进行精简:

标签:路经,right,return,leetcode112,true,targetSum,null,root,总和
来源: https://www.cnblogs.com/huangming-zzz/p/15971428.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有