INPUT :( A(B(D(E)(F)))(C)(K)) 我目前有两个函数,它给我一个OUTPUT:
A
B
C
K
B
D
D
E
F
E
NIL
但是我需要这样的输出:
a:b c k
b:d
C:
K:
d:e f
E:
f:
或
a
b s k
d
e f
(defun print-children (s)
(cond ((null (caar (cdr s))) nil)
(t (print (caar (cdr s))) (print-children (cdr s)))))
(defun print-tree (s)
(cond ((null s) nil)
((atom (car s)) (print (car s)) (print-children s) (print-tree (cdr s)))
(t (print-tree (car s)))))
答案 0 :(得分:5)
<强>节点强>
您应该首先定义:节点的一些数据结构函数。
nodep
thing - &gt;是节点吗?node-name
node - &gt;返回节点的名称node-children
node - &gt;返回节点的子节点广度优先
然后我将定义一个以广度优先顺序遍历树的函数。
breadth-first
树 fn &optional
队列 此函数将以广度优先顺序在树的所有元素上调用FN
。
FN
将上面的循环写为递归函数。
呼叫BREADTH-FIRST
CL-USER 76 > (breadth-first '(A (B (D (E)
(F)))
(C)
(K))
(lambda (node)
(princ (node-name node))
(princ ":")
(mapc (lambda (child)
(princ (node-name child)))
(node-children node))
(terpri)))
A:BCK
B:D
C:
K:
D:EF
E:
F: