(define (flatten tree)
(cond ((null? tree) '())
((not (pair? tree)) tree)
((null? (car tree))
(flatten (cdr tree)))
((pair? (car tree))
(append (flatten (car tree))
(flatten (cdr tree))))
(else (cons (car tree)
(flatten (cdr tree))))))
(display (flatten '((((()) 1 2) 3) (()) 4 (5))))