Tengo un árbol representado como un vector anidado. Quiero tener una generalización de indexed
para los árboles, que muestra el índice de cada nodo de este tipo,Transversal de árbol de posdatos con clojure.zip para editar nodos
(visit 42); => [0 42]
(visit [6 7]); => [0
; [[0 6]
; [1 7]]]
La aplicación ingenua usaría clojure.zip directamente (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))]
%)))))))
Pero recurrentes con clojure.zip/next
realiza un recorrido de preorden, resultando en un bucle infinito en este caso (los nodos no visitados obtienen conj
ed en un vector [:found]
infinitamente). Otro enfoque sería usar clojure.walk/postwalk
, pero no proporciona información estructural, como índice.
¿Cómo implementarías esto? ¿Hay un postorder-next
para zip que pueda resolverlo de inmediato?
Es un placer leer una respuesta sólida de usted otra vez –