我试图从一个N-叉树数据结构中返回一组小部件的列表。在我的单元测试中,如果我大约有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))
}