2013-12-16 115 views
3

我有一個二叉搜索樹,我想刪除一個節點。如何從返回值的函數中不返回任何內容?

我需要得到其父母,所以我寫了一個函數:

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) { 
     if(root == null) 
      return null; 
     if(node.element().lessThan(root.element())) { 
      if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
       return root; 
      else 
       getParent(root.getLeft(), node); 
     } else { 
      if(root.getRight() != null && root.getRight().element().equal(node.element())) 
       return root; 
      else 
       getParent(root.getRight(), node); 
     } 
    } 

與C/C++,Java的是給我下面的錯誤:

This method must return a result of type BSTreeNode<T> 

也迫使我返回值在函數的最後一行。

我該如何解決它在我的功能上下文?

+7

使用'return getParent ...' –

+0

@SotiriosDelimanolis並使用哪些參數? – Billie

+0

我不知道,那是你設計的一部分。關鍵是如果你的返回類型與「void」不同,你的方法必須總是返回一些東西。 –

回答

3

你的函數沒有爲每個可能的情況下返回。你有:

if (null)... 

if (less than root)... 
else (if ...) 
     else (no return!) 

如果它不爲空,並返回最後的else返回什麼?沒有返回。

您可以在else語句中使用return getParent...。或return null在函數的結尾(不在if或else語句中)

我經常看到類似的代碼來覆蓋if語句返回值的事件。

public int getAnswer() 
{ 
    if (answer.equals("yes")) 
     return 0; 
    else if (answer.equals("no")) 
     return 1; 

    return null; 
} 
+0

這是正確的。您需要在if/else語句的每個分支中都有一個返回。 – Christine

2

你要善於用這樣的:

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) { 
    if(root == null) 
     return null; 
    if(node.element().lessThan(root.element())) { 
     if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
      return root; 
     else 
      return getParent(root.getLeft(), node); 
    } else { 
     if(root.getRight() != null && root.getRight().element().equal(node.element())) 
      return root; 
     else 
      return getParent(root.getRight(), node); 
    } 
} 
-1

添加返回null;該方法結束時的聲明。 我認爲這種說法在正常情況下將無法訪問,但添加它只是爲了解決編譯錯誤,並嘗試將發生什麼。

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) { 
     if(root == null) 
      return null; 
     if(node.element().lessThan(root.element())) { 
      if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
       return root; 
      else 
       getParent(root.getLeft(), node); 
     } else { 
      if(root.getRight() != null && root.getRight().element().equal(node.element())) 
       return root; 
      else 
       getParent(root.getRight(), node); 
     } 
return null; 
    } 
+0

它總是返回'null'。 – Billie

+1

沒有人,請檢查一下,如果所有條件都失敗,並且與上面支持的答案顯然相同,則返回語句將僅執行。所以請刪除投票:) –