Skip to content

Instantly share code, notes, and snippets.

@CoderPrans
Created July 29, 2021 13:55
Show Gist options
  • Save CoderPrans/d771c9739e1cd94aaf9ed324911e1c9a to your computer and use it in GitHub Desktop.
Save CoderPrans/d771c9739e1cd94aaf9ed324911e1c9a to your computer and use it in GitHub Desktop.
Binary Tree implementation in Clojure
;; {:n 0
;; :l {:n 1 :l nil :r nil}
;; :r {:n 2 :l nil :r {:n 3
;; :l nil
;; :r nil}}}
;; 0
;; / \
;; 1 2
;; / \ / \
;; nil nil nil 3
;; / \
;; nil nil
(def bin-tree (atom {}))
(def root {:n 0 :l nil :r nil})
(defn new-node
([] root)
([n] (assoc root :n n)))
(new-node 3)
;; => {:n 3, :l nil, :r nil}
(def target
{:n 0
:l {:n 1 :l nil :r nil}
:r {:n 2 :l nil :r {:n 3
:l nil
:r nil}}})
(defn init-tree []
(swap! bin-tree assoc :n 0 :l nil :r nil))
(defn mutate-tree [n & path]
(swap! bin-tree assoc-in path (new-node n)))
@bin-tree
;; => {}
(= target
(do
(init-tree)
(mutate-tree 1 :l)
(mutate-tree 2 :r)
(mutate-tree 3 :r :r)))
;; => true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment