我有下面的構造做了一個二叉樹:搜索節點的樹在Java中
public Person(String name, int age, char gender, Person c1, Person c2)
c1爲左子和c2是正確的孩子。
我想編寫一個方法來搜索最大代中的特定名稱。就像a.depthFirstSearch(Eva, 1);
這裏Eva是搜索的名字,1是我可以查看的世代(或層次)的最大數量。
這是我有: 編輯:
public Person depthFirstSearch(String name, int maxGeneration)
{
{
Person temp;
if (maxGeneration>1){
if (this.name.equals(name)){
temp=this;
return temp;
}
else{
if (child1!=null)
temp=child1.depthFirstSearch(name, maxGeneration-1);
if (child2!=null)
temp=child1.depthFirstSearch(name, maxGeneration-1);
}
}
return null;
}
}
這裏有兩個問題。我認爲深度在每次函數調用時都被重置爲0,所以我知道我可以跟蹤其他地方的深度或找到替代方法。我認爲另一個問題是,child2從來沒有真正到達過,因爲我在child1返回。我不確定這是如何工作的,所以如果有人能夠解釋這一點,那會很棒。任何修復建議?
另外,我被告知必須先搜索深度,意味着首先深入探索更深的世代。我不確定這意味着什麼,以及它與我在實現中使用的邏輯有多麼不同。
請參閱編輯的代碼,我仍然沒有得到它的工作.. – Snowman 2010-11-07 02:31:37
@fprime:看我的更新答案。 – casablanca 2010-11-07 02:41:20
非常感謝。這工作。但現在向我解釋一些事情。爲什麼我們在檢查temp!= null之後馬上返回?當我們有temp = child1.depthFirstSearch(name,maxGeneration-1);',我們是先運行遞歸還是前進到檢查'(temp!= null)'的下一行?我不理解這是如何工作的。 – Snowman 2010-11-07 02:52:33