Trees
Level-Order Traversal
Visit a tree breadth-first with a queue.
Algorithm
The canonical tree is 4(2(1,3),6(5,7)), so this R DSA
implementation can be compared directly with the rest of the DSA track.
Basic Implementation
basic.R
node <- function(value, left = NULL, right = NULL) list(value = value, left = left, right = right)
render <- function(n) {
if (is.null(n)) return("_")
if (is.null(n$left) && is.null(n$right)) return(as.character(n$value))
paste0(n$value, "(", render(n$left), ",", render(n$right), ")")
}
sample_tree <- function() node(4, node(2, node(1), node(3)), node(6, node(5), node(7)))
list_string <- function(values) paste0("[", paste(values, collapse = ", "), "]")
queue <- list(sample_tree())
output <- c()
while (length(queue) > 0) { n <- queue[[1]]; queue <- queue[-1]; output <- c(output, n$value); if (!is.null(n$left)) queue <- append(queue, list(n$left)); if (!is.null(n$right)) queue <- append(queue, list(n$right)) }
cat(list_string(output), "\n", sep = "")
Complexity
- Time: O(n)
- Space: O(w) queue space
Implementation notes
- Render tree structure explicitly instead of printing node objects.
- The replay highlights the node, traversal state, queue, path, or search cursor that changes at each step.
level order
Level-order traversal uses a queue to visit shallower nodes first.