2015-11-15 63 views
-1

我已经环顾四周,我看不到找到一种方法来做到这一点。 我只是想逐级打印出一棵树。在Clojure中树的打印级别

所以'[a [b c]]会打印出:

a 
b c 
+0

没人? :P我的头完全被打败了! – James

+0

我没有。我看着它,从下午1点开始一直这样做。就像有一个心理障碍在继续。我来自Java背景,我正在使用Stuart Halloway编程Clojure,但那真的没有任何帮助。 – James

+0

@DanielJour对不起,忘了标记你... – James

回答

0

提供我理解正确的话,这个代码应工作:

(defn bf 
    [root] 
    (if (vector? root) 
    (let [roots (filterv (complement vector?) root) 
      children (filterv vector? root)] 
     (if-not (empty? children) 
     (into [roots] (mapcat bf children)) 
     [roots])) 
    root)) 

这不是懒,它返回一个包含节点,例如向量的向量

(bf ['a ['b 'c] 'd ['e 'f]]) => [[a d] [b c] [e f]] 

打印出来:

(let [xs (bf ['a ['b 'c] 'd ['e 'f]])] 
    (doseq [line (map str/join xs)] ; you need to require [clojure.string :as str] 
    (println line))) 
+0

http://articles.leetcode.com/2010/09/printing-binary-tree-in-level-order。HTML这就是我的意思是马辛,谢谢你的努力虽然这就是我所需要的。我希望你能从中得到比你更好的感觉:( – James

+0

这一切都归结为你选择的表示方式,我无法理解它,对不起,这就是为什么我提出了另一种表示方式,更规范一个就lisps而言,我的解决方案不适合你吗?你只需要逐一打印每个矢量 –

+0

如果你看结果,每个矢量对应于你想打印的一行(例如[ ) –