我从一个Java库中接收到了一棵树形结构。由于我只对树的“key”值感兴趣,因此我正在尝试将其展平。该树由以下零个或多个类组成:
class R(val key: String, val nodes: java.util.List[R]) {}
使用空的节点列表表示分支的结束。可以通过以下代码构建示例:
val sample = List[R](
new R("1", List[R](
new R("2", List[R]().asJava),
new R("3", List[R](new R("4", List[R]().asJava))
.asJava)).asJava)).asJava
我在编写一个正确和高效的方法时遇到了困难。目前我的代码如下:
def flattenTree(tree: List[R]): List[String] = {
tree.foldLeft(List[String]())((acc, x) =>
x.key :: flattenTree(x.nodes.asScala.toList))
}
然而,尽管这段代码可能效率低下,但当我运行它时,结果仍然是错误的。我的结果如下:
>>> flattenTree(sample.asScala.toList)
res0: List[String] = List(1, 3, 4)
这意味着由于某种原因,我丢失了键为“2”的节点。
有人能推荐一种正确且更高效的方法来展开这棵树吗?