Skip to content

Instantly share code, notes, and snippets.

@michaelayoub
Created June 19, 2025 21:52
Show Gist options
  • Select an option

  • Save michaelayoub/144e1f6334ef2a47f9cd16c4f4809069 to your computer and use it in GitHub Desktop.

Select an option

Save michaelayoub/144e1f6334ef2a47f9cd16c4f4809069 to your computer and use it in GitHub Desktop.

Revisions

  1. michaelayoub created this gist Jun 19, 2025.
    33 changes: 33 additions & 0 deletions level_order_traversal.clj
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    (ns get-started.level-order-traversal
    (:require [clojure.string :as string]))

    (defn level-order [root]
    (if (nil? root)
    []
    (loop [nodes [root]
    level-values []]
    (if (empty? nodes)
    level-values
    (let [[current-level-nodes next-nodes]
    (reduce (fn [[current-nodes next-nodes] node]
    (if node
    [(conj current-nodes (:val node))
    (into next-nodes (remove nil? [(:left node) (:right node)]))]
    [current-nodes next-nodes]))
    [[] []]
    nodes)]
    (recur next-nodes (conj level-values current-level-nodes)))))))

    (defn print-level-order [tree]
    (let [levels (level-order tree)]
    (doseq [level levels]
    (println (string/join " " level)))))

    (def tree
    {:val 1,
    :left {:val 2, :left {:val 4}}
    :right {:val 3, :left {:val 5}, :right {:val 6}}})

    (print-level-order tree) ; 1
    ; 2 3
    ; 4 5 6