2017-01-16 86 views
0

我有一個二叉搜索樹,我想有這樣一個特定的值,以獲得子樹:Java的遞歸方法總是返回null

private Node getNode(Node root,Object c){ 

     String data = String.valueOf(c); 
     if(root != null) { 
      getNode(root.left,c); 
      if(root.data.equals(data)){ 
       System.out.println("found!!"); 
       return root; 
       } 
      getNode(root.right,c); 
      } 
     return null; 
    } 

System.out.println(getNode(root,c)); 

輸出:

「發現!」

null

但它總是返回一個空值。我想知道爲什麼以及如何解決這個問題。謝謝!

+1

使用調試器找到它。我的第一個猜測是,'root'爲null – Jens

+4

您對遞歸調用的返回值 –

+0

不做任何處理,根目錄不爲空。 –

回答

3

您不評估getNode(root.left, c)getNode(root.right, c)返回的結果。

正確的是:

private Node getNode(Node root, Object c) { 
    String datac = String.valueOf(c); 
    if(root == null) return null; 
    if(Objects.equals(datac, root.data)) return root; 
    Node tmp; 
    return ((tmp = getNode(root.left, c)) != null) ? tmp : getNode(root.right, c); 
}