2017-04-08 72 views
1

我不知道爲什麼我在我的方法中得到空值?爲什麼它在我的二叉搜索樹中返回null,搜索方法

public Node<E> search(int data, Node<E> start){ 
    Node<E> foundNode = null; 

    if(data < start.getData()){ 
     search(data, start.getLeftNode()); 
    } 

    if(data > start.getData()){ 
     search(data, start.getRightNode()); 
    } 

    if(data == start.getData()){ 
     foundNode = start; 
    } 

    return foundNode; 

} 

如果我把System.out.println(foundNode); return語句我得到的節點,但是當它返回它,我得到空之前!

回答

0

你缺少的遞歸函數的返回語句調用: search(data,start.getLeftNode());search(data, start.getRightNode());

你的方法將只在有執行,如果沒有遞歸調用工作他們仍然執行foundNode返回的仍然是NULL,因爲它是一個局部變量。

所以,正確的代碼是:

public Node<E> search(int data, Node<E> start){ 
Node<E> foundNode = null; 

if(data < start.getData()){ 
    return search(data, start.getLeftNode()); 
} 

if(data > start.getData()){ 
    return search(data, start.getRightNode()); 
} 

if(data == start.getData()){ 
    foundNode = start; 
} 
return foundNode; 

}

+0

我不知道我怎麼會錯過了,謝謝。 –

0

這裏是我的方法:

private Node search(String name, Node node){ 
    if(node != null){ 
     if(node.name().equals(name)){ 
      return node; 
     } else { 
      Node foundNode = search(name, node.left); 
      if(foundNode == null) { 
       foundNode = search(name, node.right); 
      } 
      return foundNode; 
     } 
    } else { 
     return null; 
    } 
}