Arboles.lsp



; RECORRIDO DE ARBOL
; Se emplea una lista de listas de tres elementos para representar el arbol
; binario: (elemento hijo-izq hijo-derecha)
(defun recorre-pre-orden (arbol)
  (if (endp arbol)
      nil
    (cons (car arbol) (append (recorre-pre-orden (cadr arbol))
                              (recorre-pre-orden (caddr arbol))))))

(defun recorre-post-orden (arbol)
  (if (endp arbol)
      nil
    (append (recorre-post-orden (cadr arbol))
            (recorre-post-orden (caddr arbol))
            (list (car arbol)))))
(defun recorre-in-orden (arbol)
  (if (endp arbol)
      nil
    (append (recorre-in-orden (cadr arbol)) (list (car arbol))
            (recorre-in-orden (caddr arbol)))))
; DefiniciOn de un pequeNIo arbol con tres niveles
(defun nodo11 () '(nodo11 nil nil))
(defun nodo12 () '(nodo12 nil nil))
(defun nodo1 () (cons 'nodo1 (list (nodo11) (nodo12))))
(defun nodo21 () '(nodo21 nil nil))
(defun nodo22 () '(nodo22 nil nil))
(defun nodo2 () (cons 'nodo2 (list (nodo21) (nodo22))))
(defun nodo-raiz () (cons 'raiz (list (nodo1) (nodo2))))
(recorre-pre-orden (nodo-raiz))
(recorre-in-orden (nodo-raiz))
(recorre-post-orden (nodo-raiz))