我正在从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
?
答案 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;
}