2016-10-20 115 views
2

我試圖搜索非二叉樹中的一個節點,而沒有實際將節點傳遞給搜索方法。通過樹進行遞歸搜索而不通過對象

每個節點都有一個name變量。 findChild()方法採用一個名稱,並搜索所調用的樹來查找具有該名稱的節點。

要進行遞歸搜索,我在子節點上調用findChild(),而不是將子節點傳遞給findChild()方法。打印語句顯示該方法在樹中下移,但當堆棧展開時result變量被設置爲空,因此該方法始終返回null。我明白爲什麼這樣做,但我不明白如何展開這種類型的遞歸。任何幫助表示讚賞!

findChild()方法:

public FileNode findChild(String name) { 
    FileNode result = null; 
     for (FileNode child : this.getChildren()) { 
      if (child.getName() == name) { 
       return child; 
      } else { 
       child.findChild(name); 
      } 
     } 
    return result; 
} 
+0

首先,您應該總是使用'.equals'來比較字符串而不是'=='。 '=='將檢查相同的對象是否是引用,而'.equals'將檢查這些字符串是否相同。 – Erik

回答

0

請問以下的小變化幫助?你的其他條件永遠不會分配一個值。

public FileNode findChild(String name) { 
    FileNode result = null; 
     for (FileNode child : this.getChildren()) { 
      if (child.getName() == name) { 
       result = child; 
       break; 
      } else { 
       result = child.findChild(name); 
       if (result != null) 
        break; 
      } 
     } 
    return result; 
} 
1

你在else塊扔掉FileNode#findChild結果

試試這個

if (child.getName().equals(name)) { 
    return child; 
} else { 
    FileNode childResult = child.findChild(name); 
    if (childResult != null) { 
     return childResult; 
    } 
}