I would love some feedback on the following code for BFS traversal in a binary tree. Is there a cleaner way to write this?
abstract class Tree[+T]
case class Node[T](value:T,var left:Tree[T],var right:Tree[T]) extends Tree[T]
case object End extends Tree[Nothing]
def bfs_v2[T](node:Node[T]):List[T] = {
def enQueueNext(queue: Queue[Node[T]], aNode: Tree[T]) {
aNode match {
case internalNode: Node[T] => queue += internalNode
case End => {}
}
}
def bfs_visit(queue:Queue[Node[T]],visited:List[T]):List[T] = {
if(queue.isEmpty){
visited
}
else{
val currentNode = queue.dequeue()
enQueueNext(queue, currentNode.left)
enQueueNext(queue,currentNode.right)
bfs_visit(queue,currentNode.value :: visited )
}
}
val aQueue = new mutable.Queue[Node[T]]()
bfs_visit(aQueue += node,List[T]()).reverse
}