2016-04-10 232 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);