首页 > 解决方案 > 如何镜像二叉树?

问题描述

我需要在 Scala 中镜像二叉树。我认为它必须像这样工作:

sealed trait BT[+A]
case object Empty extends BT[Nothing]
case class Node[+A](elem:A, left:BT[A], right:BT[A]) extends BT[A]

def mirrorTree[A](bt: BT[A]): BT[A] = bt match {
  case Empty => Empty
  case Node(root, left, right) => Node(root, right, left)
}

val t = Node(1,Node(2,Empty,Node(3,Empty,Empty)),Empty)
mirrorTree(t)

但它只返回我交换的第一级,我必须以递归方式为左右子树调用函数,但如果我必须从函数返回树,我不知道该怎么做,所以我不能使用像列表这样的运算符.

标签: scalafunctionfunctional-programming

解决方案


如果您想全部镜像,请执行以下操作:

case Node(root, left, right) => Node(root, mirrorTree(right), mirrorTree(left))

推荐阅读