Tôi có một cây được biểu thị dưới dạng vectơ lồng nhau. Tôi muốn có một sự tổng quát của indexed
cho cây, cho thấy chỉ số của mỗi nút như thế này,Tra cứu cây theo trật tự bằng clojure.zip để chỉnh sửa các nút
(visit 42); => [0 42]
(visit [6 7]); => [0
; [[0 6]
; [1 7]]]
Việc thực hiện ngây thơ sẽ sử dụng clojure.zip trực tiếp (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))]
%)))))))
Nhưng định kỳ với clojure.zip/next
thực hiện quá trình truyền tải theo thứ tự trước, dẫn đến vòng lặp vô hạn trong trường hợp này (các nút chưa được xác định nhận được conj
biến thành một vector [:found]
vô hạn). Một cách tiếp cận khác sẽ sử dụng clojure.walk/postwalk
, nhưng nó không cung cấp thông tin cấu trúc, chẳng hạn như chỉ mục.
Bạn sẽ triển khai điều này bằng cách nào? Có một số postorder-next
cho zip có thể giải quyết ngay lập tức không?
Thật vui khi đọc một câu trả lời chắc chắn từ bạn một lần nữa –