您好,我无法正常使用此代码。当它一直沿着树的最左边缘递归时,它似乎跳出了堆栈。我似乎无法想出这个。
public static Node lookup(Node node, int lookupValue) {
if (node == null) {
return null;
} else {
if (node.value == lookupValue) {
System.out.println("Found");
return node;
} else if(node.left != null) {
return lookup(node.left, lookupValue);
} else if(node.right != null) {
return lookup(node.right, lookupValue);
} else {
return null;
}
}
}
答案 0 :(得分:2)
您返回从左子树(如果存在)返回的任何内容,而不检查正确的子树。 else
块中有return
语句时,不需要进行大量if
分支。改变如下:
public static Node lookup(Node node, int lookupValue) {
if (node == null)
return null;
if (node.value == lookupValue)
// System.out.println("Found");
return node;
Node rval = lookup(node.left, lookupValue);
// only return if found in left sub-tree
return (rval != null) ? rval : lookup(node.right, lookupValue);
}
答案 1 :(得分:0)
你的else if
不正确你每次都要检查左右:
if (node == null) return null;
if (node.value == lookupValue) {
System.out.println("Found");
return node;
}
Node found = lookup(node.left, lookupValue);
if(found != null) {
return found;
}
return lookup(node.right, lookupValue);