(define (crear-arbol raiz hijo-izquierdo hijo-derecho) (list raiz hijo-izquierdo hijo-derecho) ) (define (arbol-vacio? arbol) (null? arbol)) (define (raiz-arbol arbol) (if (arbol-vacio? arbol) () (car arbol) ) ) (define (hijo-izquierdo-arbol arbol) (if (arbol-vacio? arbol) () (cadr arbol) ) ) (define (hijo-derecho-arbol arbol) (if (arbol-vacio? arbol) () (caddr arbol) ) ) (define (insertar x arbol) (if (arbol-vacio? arbol) (crear-arbol x () ()) (let ( (r (raiz-arbol arbol)) ) (cond ((> r x) (crear-arbol r (insertar x (hijo-izquierdo-arbol arbol)) (hijo-derecho-arbol arbol) ) ) ((< r x) (crear-arbol r (hijo-izquierdo-arbol arbol) (insertar x (hijo-derecho-arbol arbol)) ) ) (else arbol) ) ) ) ) (define (preorden arbol) (cond ((arbol-vacio? arbol) (display " ")) (else (display (raiz-arbol arbol)) (display " ") (preorden (hijo-izquierdo-arbol arbol)) (preorden (hijo-derecho-arbol arbol)) ) ) ) (define (postorden arbol) (cond ((arbol-vacio? arbol) (display " ")) (else (postorden (hijo-izquierdo-arbol arbol)) (postorden (hijo-derecho-arbol arbol)) (display (raiz-arbol arbol)) (display " ") ) ) ) (define (en-orden arbol) (cond ((arbol-vacio? arbol) (display " ")) (else (en-orden (hijo-izquierdo-arbol arbol)) (display (raiz-arbol arbol)) (display " ") (en-orden (hijo-derecho-arbol arbol)) ) ) ) (define (pertenece? x arbol) (if (arbol-vacio? arbol) #f (let ( (r (raiz-arbol arbol)) ) (cond ( (> r x) (pertenece? x (hijo-izquierdo-arbol arbol))) ( (< r x) (pertenece? x (hijo-derecho-arbol arbol))) ( else #t) ) ) ) ) ; ejemplos (define x (crear-arbol 10 () ())) x (raiz-arbol x) (hijo-izquierdo-arbol x) (hijo-derecho-arbol x) (set! x (insertar 9 x)) x (set! x (insertar 19 x)) x (set! x (insertar 12 x)) x (set! x (insertar 1 x)) x (set! x (insertar 5 x)) x (set! x (insertar 3 x)) x (set! x (insertar 6 x)) x (newline) (display "preorden") (newline) (preorden x) (newline) (display "postorden") (newline) (postorden x) (newline) (display "en-orden") (newline) (en-orden x)