Java返回语句奇怪的行为

时间:2014-10-27 19:35:10

标签: java

我正在从leetcode解决Path Sum问题,我不理解return语句的行为。我有一个有2个节点的树。根节点的值为1,其左子节点的值为2。

如果2个节点的总和为3,我必须返回true,显然它是,但不管怎样,程序在它返回true之后仍继续运行。

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

2 个答案:

答案 0 :(得分:9)

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

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;声明。

答案 1 :(得分:6)

您似乎错过了两个return语句。我想你想要像

这样的东西
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;
}