我有一棵树表示为嵌套矢量。我希望有indexed
树木,呈现出这样每个节点的指数的推广,用clojure.zip编辑节点的后序遍历树
(visit 42); => [0 42]
(visit [6 7]); => [0
; [[0 6]
; [1 7]]]
天真的实施将使用clojure.zip直接(as already asked here)
(defn visit [tree]
(loop [loc (vector-zip tree)]
(if (end? loc)
(root loc)
(recur
(next (edit loC#(conj
[(count (lefts loc))]
%)))))))
但随着clojure.zip/next
复发执行前序遍历,导致在这种情况下的无限循环(未访问节点无限地获取[:found]
矢量)。另一种方法是使用clojure.walk/postwalk
,但它不提供结构信息,如索引。
你将如何实现这一点?有没有一个postorder-next
的拉链,可以马上解决它?
再次从你那里读出一个可靠的答案是一种乐趣 – 2010-07-31 11:35:18