1 回答
TA贡献2021条经验 获得超8个赞
您可以将列表副本的实例作为参数传递给函数,而不是将列表存储在字段中。所以你的函数的签名recursive将如下所示:
public static void recursive(NumberObject object, List<NumberObject> visited)
为了隐藏此实现细节,我建议编写两个函数,其中第二个函数仅将空列表传递给另一个函数。
但是,我会选择不同的方法,因为您的新列表会获取与树中的条目一样多的新列表。在以下实现中,每个“树端”只有一个列表。此外,就像前面的建议一样,这使您的班级保持无状态。
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;
}
添加回答
举报