스칼라에서 사례 클래스와 특성을 사용하여 이진 트리 구조를 정의했습니다. 나는 이런 식으로 일을했다 : 트리 인스턴스를 제공하는 경우이진 트리가 스칼라에서 균형이 맞는지 확인
이sealed trait Tree[+T]
case class Node[A](v: A, l: Tree[A], r: Tree[A]) extends Tree[A]
case class Leaf[A](v: A) extends Tree[A]
case object Empty extends Tree[Nothing]
, 나는 균형의 정의를 잘 요소의 수는 왼쪽에 요소의 수와 동일입니다 인스턴스가 균형 있는지 확인하고 싶습니다.
내가 원하는 것을 얻을 (누적 패턴을 사용하여) 다음과 같은 방법을 시도 :
sealed trait Tree[+T]
case class Node[A](v: A, l: Tree[A], r: Tree[A]) extends Tree[A]
case class Leaf[A](v: A) extends Tree[A]
case object Empty extends Tree[Nothing]
def isBalanced[A](tree: Tree[A]) = {
def inner(tree: Tree[A], acc: (Int, Int)): Boolean = tree match {
case n: Node[A] => inner(n.l, (acc._1 + 1, acc._2)) && inner(n.r, (acc._1, acc._2 + 1))
case l: Leaf[A] => inner(tree, acc)
case Empty => acc._1 == acc._2
}
inner(tree, (0, 0))
}
val node: Node[Int] = Node(1, Node(2, Leaf(3), Leaf(4)), Node(5, Leaf(6), Leaf(7)))
isBalanced[Int](node)
이것은 무한 루프로 실행하고 나는 내 논리 바보 같은 실수를 한 것으로 확신 . 나는 실수 한 부분에 대해서 단정적이지 않다.