我试图用非平凡的(即不是Fibonacci)来解决Clojure中的核心运行,但是可以管理的例子.显然,可以使用corecursion实现二叉树遍历.维基百科在Python中有一个我无法理解的例子.
如何在Clojure中实现它?假设我正在寻找BFS,但它可能是任何订单.
这是我到目前为止所拥有的:
(defstruct tree :val :left :right)
(def my-tree (struct tree 1 (struct tree 2) (struct tree 3 4 5)))
(def bfs (lazy-cat [my-tree] (map #(:left %) bfs) (map #(:right %) bfs) ))
(println (take 4 bfs))
Run Code Online (Sandbox Code Playgroud)
不幸的是,它似乎一直向左,忽略了正确的分支.
假设Michal的代码做你想要的,这也有效:
(defn bftrav [& trees]
(when trees
(concat trees
(->> trees
(mapcat #(vector (:left %) (:right%)))
(filter identity)
(apply bftrav)))))
Run Code Online (Sandbox Code Playgroud)