我正在从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?
您应该使用递归调用返回的值:
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;声明.
你似乎错过了两个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)