Trees
Build a Binary Tree
Create a fixed seven-node binary tree and render its shape.
Algorithm
The canonical tree is 4(2(1,3),6(5,7)), so this Scala DSA
implementation can be compared directly with the rest of the DSA track.
Basic Implementation
basic.scala
import scala.collection.mutable.{ArrayBuffer, Queue}
class Node(val value: Int, var left: Node = null, var right: Node = null)
object Main {
def render(node: Node): String = {
if (node == null) "_"
else if (node.left == null && node.right == null) node.value.toString
else s"${node.value}(${render(node.left)},${render(node.right)})"
}
def sampleTree(): Node = new Node(4, new Node(2, new Node(1), new Node(3)), new Node(6, new Node(5), new Node(7)))
def listString(values: Seq[Int]): String = values.mkString("[", ", ", "]")
def main(args: Array[String]): Unit = { println(render(sampleTree())) }
}
Complexity
- Time: O(n)
- Space: O(n)
Implementation notes
class Node(val value: Int, var left: Node = null, var right: Node = null)uses an immutableIntvalue with mutable child references.- Empty children are represented with
nulldefaults, notOption[Node]. sampleTree()builds the whole tree with nested constructors:new Node(4, new Node(2, ...), new Node(6, ...)).- There are no later child assignments in this lesson; the left and right links are wired as constructor arguments.
- The trace shows the construction visually from children upward:
1,3, then2(1,3), followed by5,7, then6(5,7), and finally the root4(2(1,3),6(5,7)). render(node)treatsnullas_, prints leaf nodes as just their value, and prints internal nodes asvalue(left,right).maincallsprintln(render(sampleTree())), so the checked output is the compact tree string4(2(1,3),6(5,7)).
node links
A node stores one value plus references to its left and right children.