2016-05-31 48 views
0

我想爲二叉搜索樹編寫搜索函數。我如何編寫它,以便我可以從基本案例if(root.data == node.data){return node;}返回而不會收到有關該方法不返回任何內容的編譯器警告。在這種情況下,root是這些方法所屬BST類的一部分。目標C中的二叉搜索樹返回聲明搜索函數

-(Node*)search:(Node*)node{ 
    if(root == nil){ 
     return node; 
    } 

    if(root.data == node.data){ 
     return node; 
    } 

    if (node.data < root.data){ 
     root = root.left; 
     [self search:root]; 
    } 

    if (node.data > root.data) { 
     root = root.right; 
     [self search:root]; 
    } 
} 

回答

0

你得到的錯誤,因爲你沒有在一定條件下你search:方法返回任何東西。你必須回報一些東西。當您遞歸調用search:時,您也不會使用任何返回值。

您在更新root時也有問題。你不想這樣做。

你可能想要更多的東西是這樣的:

- (Node *)search:(Node *)node { 
    if (root == nil) { 
     return node; 
    } 

    if (root.data == node.data) { 
     return node; 
    } else if (node.data < root.data) { 
     return [self search:node.left]; 
    } else // node.data > root.data 
     return [self search:node.right]; 
    } 
} 
+0

我不知道我能在這樣一個return語句調用一個方法。謝謝。 – noobsmcgoobs

+0

'return'採取任何有效的表達式。當然你也可以把'[self search:root];'的結果賦給一個變量,然後返回變量。 – rmaddy

+0

但如果該方法返回一個對象(在本例中爲節點),則每個if語句都必須返回一個對象?我不能只是回報;對於第一種情況? – noobsmcgoobs

-1

如果前兩個如果測試都不是真的,你的方法不會返回任何東西。 嘗試;

if (node.data < root.data){ 
    root = root.left; 
    return [self search:root]; 
    } 

    if (node.data > root.data) { 
    root = root.right; 
    return [self search:root]; 
    } 

    return ? // you need a return value here