說我已經得到了一些節點和他們的父母直接,如:如果我知道節點及其父母,如何構建樹?
case class Mapping(name: String, parents: Seq[String] = Nil)
val mappings = Seq(
Mapping("aaa"),
Mapping("bbb"),
Mapping("ccc"),
Mapping("ddd", Seq("aaa", "bbb")),
Mapping("eee", Seq("ccc")),
Mapping("fff", Seq("ddd")),
Mapping("ggg", Seq("aaa", "fff")),
Mapping("hhh")
)
如何寫Scala中的一個功能,將建立基於這些樹?
def buildTrees(data: Seq[Mapping]): Seq[Node] = ???
case class Node(name: String, children: Seq[Node] = Nil)
val trees = buildTrees(mappings)
private val expectedTree = Seq(
Node("aaa", Seq(
Node("ggg"),
Node("ddd", Seq(
Node("fff", Seq(
Node("ggg")
))))
)),
Node("bbb", Seq(
Node("ddd", Seq(
Node("fff", Seq(
Node("ggg")
))))
)),
Node("ccc", Seq(
Node("eee")
)),
Node("hhh", Seq())
)
if (trees == expectedTree) {
println("OK")
} else {
println("Not equal")
}
如何實施buildTrees
方法?我想了一會兒,但可以得到一個優雅的解決方案。
更新:希望看到一成不變的數據
這看起來很奇怪,因爲相同的源節點可以在輸出中複製。 – user2864740
謝謝,修正問題 – Freewind
這聽起來更像是一個有向無環圖(DAG) - 在一棵樹中,一個節點有0或1個父母,而不是多個父母。 – Bergi