我正在尝试遍历 Lisp 中的树顺序。到目前为止,我设法构建了 Postorder 遍历,但是 inorder 让我头疼..
树的格式是这样的:
A
/ \
B C (A 2 B 0 C 2 D 0 E 0)
/ \
D E
(defun traverseTreeMain (l)
(traverseTree l nil)
)
(defun traverseTree (l lc)
(cond
((and (null l) (null lc)) nil)
((null l) (append nil (traverseTree lc nil)))
((=(cadr l) 0) (append (list (car l)) (traverseTree (cddr l) lc) ))
((= (cadr l) 1) (append nil (traverseTree (cddr l)
(append ( list (car l) (- (cadr l) 1) ) lc)
)
)
)
(t (append nil (traverseTree (cddr l) (append lc (list (car l) (- (cadr l) 1))))))
)
)
;;run: (traverseTreeMain '(A 2 B 0 C 2 D 0 E 0)) --POSTORDER
;;=> (B D E C A)