首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java返回语句奇怪行为

问Java返回语句奇怪行为
EN

Stack Overflow用户
提问于 2014-10-27 19:35:10
回答 2查看 119关注 0票数 2

我正在解决leetcode中的路径求和问题,我不理解返回语句的行为。我有一棵有两个节点的树。根节点的值为1,其左子节点的值为2。

如果两个节点的和为3,我必须返回true,这显然是正确的,但是程序即使在到达返回true之后也会继续运行。

代码语言:javascript
复制
public class Solution {
    public boolean hasPathSum(TreeNode root, int sum) {
        if (root != null) return hasPathSumRec(root, 0, sum);
        else return false;
    }

    public boolean hasPathSumRec(TreeNode node, int currentSum, int sum) {
        if (isLeaf(node) && sum == currentSum + node.val) {
            return true;
        } else {
            if (node.left != null) {
                hasPathSumRec(node.left, currentSum + node.val, sum);
            }
            if (node.right != null) {
                hasPathSumRec(node.right, currentSum + node.val, sum);
            }
        }
        return false;
    }

    public boolean isLeaf(TreeNode node) {
        return node.left == null && node.right == null;

    ....
}

我的问题是-程序如何到达return false,即使它进入return true

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-27 19:37:02

您应该使用递归调用返回的值:

代码语言:javascript
复制
public boolean hasPathSumRec(TreeNode node, int currentSum, int sum) {
    if (isLeaf(node) && sum == currentSum + node.val) {
        return true;
    } else {
        boolean result = false;
        if (node.left != null) {
            result = result || hasPathSumRec(node.left, currentSum + node.val, sum);
        }
        if (node.right != null) {
            result = result || hasPathSumRec(node.right, currentSum + node.val, sum);
        }
        return result;
    }
    return false;
}

当您忽略它们时,您将到达return false;语句。

票数 9
EN

Stack Overflow用户

发布于 2014-10-27 19:37:38

您似乎遗漏了两个return语句。我想你想要的是

代码语言:javascript
复制
if (node.left != null) {
  if (hasPathSumRec(node.left, currentSum + node.val, sum)) return true;
}
if (node.right != null) {
  if (hasPathSumRec(node.right, currentSum + node.val, sum)) return true;
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26595455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档