从二叉树中删除节点 - 返回树集

时间:2016-10-06 19:59:07

标签: scala

我有点盯着这个问题寻找乐趣,并且有点打了一个路障,并且无法在网上找到很多信息。我想在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相对较新,任何帮助都会受到赞赏。

干杯

1 个答案:

答案 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)
    }
}