2011-05-25 34 views
0

我有一個奇怪的問題關於下面的代碼。我編寫代碼來搜索樹。一棵樹把兩樣東西放在一起!

public TreeNode<City> search(City parent, TreeNode<City> t){ 
    if (t.getCity().equals(parent)) { 
     System.out.println("ccc"); 
     return t; 
    } 
    else if (t.hasLeftChild()){ 
     System.out.println("bbb"); 
     search(parent,t.getLeftChild()); 
    } 
    else if(t.hasNextSibling()){ 
     System.out.println("aaa"); 
     search(parent,t.getNextSibling()); 
    } 
    return null; 
} 

奇怪的是:假設我的樹中只有一個元素。然後,當我嘗試將一個元素添加到我的樹中時,該方法正常工作。但是,當有兩個元素(一個父母和一個孩子),並且我搜索孩子時,屏幕上顯示的是「ccc」,代碼返回的內容爲空!

我想沒人會遇到那種愚蠢的情況。請幫幫我!

+0

這裏沒有足夠的代碼來解決這個問題。請包括語言,'TreeNode'的實現,以及你期望看到的輸出。 – recursive 2011-05-25 21:50:09

回答

1

除非在第一次搜索呼叫中滿足第一個(...),否則不會希望返回除null之外的任何內容,因爲兩個呼叫的返回值將被丟棄。

1

您應該添加return S,例如:

return search(...); 

這就是遞歸背後的概念;你正在調用函數並遞歸,但是你忽略了遞歸調用的結果!因爲你忽略它,代碼完成通過你的if報表,並繼續返回null像你告訴它。