2016-04-10 199 views
1

嗨我无法正常工作。当它沿着树的最左边向下递归时,它似乎跳出堆栈。我似乎无法弄清楚这一点。递归地搜索二叉树

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

如果这不是一个二叉树,那么为什么只左右节点被匹配 – bugwheels94

+0

道歉,它确实是二进制的obv – dgalati54

+0

这是一个bst或是没有特定顺序的值? – Joni

回答

2

您返回左子树(如果存在)返回的任何内容,而不检查正确的子树。当if块中有return语句时,不需要很多else分支。更改如下:

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); 
} 
0

else if是不正确的,你chould检查左,右everytimes:

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);