중첩 된 벡터로 표현 된 트리가 있습니다. 나는노드를 편집하기 위해 clojure.zip을 사용한 Postorder tree traversal
(visit 42); => [0 42]
(visit [6 7]); => [0
; [[0 6]
; [1 7]]]
순진 구현은 직접 (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 사용하지만 clojure.zip/next
로 반복되는 것 같은 각 노드의 인덱스를 보여주는 나무에 대한 indexed
의 일반화를 갖고 싶어 이 경우 무한 루프를 초래하는 선행 순회를 수행합니다 (방문하지 않은 노드는 conj
이 무한히 [:found]
벡터가됩니다). 또 다른 방법은 clojure.walk/postwalk
을 사용하는 것이지만 인덱스와 같은 구조 정보는 제공하지 않습니다.
어떻게 구현하나요? 지금 당장 해결할 수있는 zip 용 postorder-next
이 있습니까?
다시 한 번 확실한 답변을 읽는 것이 기쁨입니다. –