1 回答

TA貢獻2021條經(jīng)驗 獲得超8個贊
您可以將列表副本的實例作為參數(shù)傳遞給函數(shù),而不是將列表存儲在字段中。所以你的函數(shù)的簽名recursive將如下所示:
public static void recursive(NumberObject object, List<NumberObject> visited)
為了隱藏此實現(xiàn)細節(jié),我建議編寫兩個函數(shù),其中第二個函數(shù)僅將空列表傳遞給另一個函數(shù)。
但是,我會選擇不同的方法,因為您的新列表會獲取與樹中的條目一樣多的新列表。在以下實現(xiàn)中,每個“樹端”只有一個列表。此外,就像前面的建議一樣,這使您的班級保持無狀態(tài)。
static List<NumberObject> findLongestPath(NumberObject currentNode) {
if (currentNode.getConnectedNodes().isEmpty()) {
List<NumberObject> result = new ArrayList<>();
result.add(currentNode);
return result;
}
List<NumberObject> longestPath = currentNode.getConnectedNodes().stream()
.map(PathFinder::findLongestPath)
.max(Comparator.comparing(List::size))
.get();
longestPath.add(currentNode);
return longestPath;
}
添加回答
舉報