我正在尝试从 N-tree 数据结构返回小部件列表。在我的单元测试中,如果我有大约 2000 个小部件,每个小部件都有一个依赖项,我会遇到堆栈溢出。我认为正在发生的是 for 循环导致我的树遍历不是尾递归的。在scala中写这个更好的方法是什么?这是我的功能:
protected def getWidgetTree(key: String) : ListBuffer[Widget] = {
def traverseTree(accumulator: ListBuffer[Widget], current: Widget) : ListBuffer[Widget] = {
accumulator.append(current)
if (!current.hasDependencies) {
accumulator
} else {
for (dependencyKey <- current.dependencies) {
if (accumulator.findIndexOf(_.name == dependencyKey) == -1) {
traverseTree(accumulator, getWidget(dependencyKey))
}
}
accumulator
}
}
traverseTree(ListBuffer[Widget](), getWidget(key))
}