我正在解决leetcode中的路径求和问题,我不理解返回语句的行为。我有一棵有两个节点的树。根节点的值为1,其左子节点的值为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
发布于 2014-10-27 19:37:02
您应该使用递归调用返回的值:
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;语句。
发布于 2014-10-27 19:37:38
您似乎遗漏了两个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;
}https://stackoverflow.com/questions/26595455
复制相似问题