我有点盯着这个问题寻找乐趣,并且有点打了一个路障,并且无法在网上找到很多信息。我想在Scala中创建一个算法,当您从树中删除某个值的节点时,它将返回它创建的树集。例如树
with tf.device("/cpu:0"):
# ...
with tf.device("/cpu:1"):
# ...
如果我们删除4,那么它将返回树,如下所示:
1
/ \
3 4
/\ /\
4 5 6 2
到目前为止我所拥有的内容如下:
[ 1 , 6 , 2 ]
[ / ]
[ 3 ]
[ \ ]
[ 5 ]
我对Scala相对较新,任何帮助都会受到赞赏。
干杯
答案 0 :(得分:0)
这是一个可能写得更简洁的答案,但我希望它有点清楚地表达了算法:
case class N[T](value: T, children: List[N[T]] = Nil) {
def remove(t: T) = {
val r = _remove(t)
r._1.toList ++ r._2
}
def _remove(t: T): (Option[N[T]], List[N[T]]) =
if(value == t) (None, children.map(_._remove(t)).flatMap{ case (c, o) => c.toList ++ o})
else {
val results = children.map(_._remove(t))
val me = this.copy(children = results.flatMap(_._1))
val others = results.flatMap(_._2)
(Some(me), others)
}
}