// P62 (*) Collect the internal nodes of a binary tree in a list. // An internal node of a binary tree has either one or two non-empty // successors. Write a method internalList to collect them in a list. // // scala> Node('a', Node('b'), Node('c', Node('d'), Node('e'))).internalList // res0: List[Char] = List(a, c) sealed abstract class Tree[+T] { def internalList: List[T] } case class Node[+T](value: T, left: Tree[T], right: Tree[T]) extends Tree[T] { def internalList: List[T] = (left, right) match { case (End, End) => Nil case _ => value :: left.internalList ::: right.internalList } } case object End extends Tree[Nothing] { def internalList = Nil }