我有一个从 Java 库接收的树结构。我试图将其展平,因为我只对树的“关键”值感兴趣。树由以下零个或多个类组成:
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”的节点。
有人可以推荐一种正确且更有效的方法来展平这棵树吗?