Java返回语句奇怪的行为

gab*_*k00 2 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;

    ....
}
Run Code Online (Sandbox Code Playgroud)

我的问题是 - return false即使它进入,该计划如何实现return true

Era*_*ran 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;
}
Run Code Online (Sandbox Code Playgroud)

当您忽略它们时,您会到达return false;声明.


Ell*_*sch 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;
}
Run Code Online (Sandbox Code Playgroud)