I have a list that looks like (A (B (C D)) (E (F))) which represents this tree:
A / \ B E / \ / C D F
How do I print it as (A B E C D F) ?
This is as far as I managed:
((lambda(tree) (loop for ele in tree do (print ele))) my-list)
But it prints:
A (B (C D)) (E (F)) NIL
I’m pretty new to Common LISP so there may be functions that I should’ve used. If that’s the case then enlight me.
Thanks.
Taking your question at face value, you want to print out the nodes in ‘breadth-first’ order, rather than using one of the standard, depth-first orderings: ‘in-order’ or ‘pre-order’ or ‘post-order’.
post-order: C D B F E A
requested order: A B E C D F
In your tree structure, each element can be either an atom, or a list with one element, or a list with two elements. The first element of a list is always an atom.
What I think the pseudo-code needs to look like is approximately:
I’m 100% sure that can be cleaned up (that looks like trivial tail recursion, all else apart). However, I think it works.