Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
44
Task/Tree-traversal/Clojure/tree-traversal.clj
Normal file
44
Task/Tree-traversal/Clojure/tree-traversal.clj
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
(defn walk [node f order]
|
||||
(when node
|
||||
(doseq [o order]
|
||||
(if (= o :visit)
|
||||
(f (:val node))
|
||||
(walk (node o) f order)))))
|
||||
|
||||
(defn preorder [node f]
|
||||
(walk node f [:visit :left :right]))
|
||||
|
||||
(defn inorder [node f]
|
||||
(walk node f [:left :visit :right]))
|
||||
|
||||
(defn postorder [node f]
|
||||
(walk node f [:left :right :visit]))
|
||||
|
||||
(defn queue [& xs]
|
||||
(when (seq xs)
|
||||
(apply conj clojure.lang.PersistentQueue/EMPTY xs)))
|
||||
|
||||
(defn level-order [root f]
|
||||
(loop [q (queue root)]
|
||||
(when-not (empty? q)
|
||||
(if-let [node (first q)]
|
||||
(do
|
||||
(f (:val node))
|
||||
(recur (conj (pop q) (:left node) (:right node))))
|
||||
(recur (pop q))))))
|
||||
|
||||
(defn vec-to-tree [t]
|
||||
(if (vector? t)
|
||||
(let [[val left right] t]
|
||||
{:val val
|
||||
:left (vec-to-tree left)
|
||||
:right (vec-to-tree right)})
|
||||
t))
|
||||
|
||||
(let [tree (vec-to-tree [1 [2 [4 [7]] [5]] [3 [6 [8] [9]]]])
|
||||
fs '[preorder inorder postorder level-order]
|
||||
pr-node #(print (format "%2d" %))]
|
||||
(doseq [f fs]
|
||||
(print (format "%-12s" (str f ":")))
|
||||
((resolve f) tree pr-node)
|
||||
(println)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue