Está en la página 1de 5

Cdigo Scheme

Crear rbol (define create-tree (lambda (lista arbol) (let tree ((lista lista) (arbol arbol)) (cond ((null? lista) arbol ) (else (create-tree (cdr lista) (add-node (car lista) arbol)) ) ) ) ) )

Agregar nodo (define add-node (lambda (elem arbol) (if (null? arbol) (list elem #f #f) (let temp ((elem elem) (arbol arbol) (left (car (cdr arb ol))) (right (car (cddr arbol)))) (cond (( elem (car arbol)) (if (equal? #f right) (list (car arbol) left (list elem #f #f)) (list (car arbol) left (add-node elem right)) ) ) ((= elem (car arbol)) arbol ) ) ) ) ) )

Eliminar nodo (define delete-node (lambda (elem arbol) (let temp ((elem elem) (arbol arbol) (left (car (cdr arbol))) (r ight (car (cddr arbol)))) (if (null? arbol) arbol (if (not (is-in elem arbol)) arbol (if (eqv? elem (car arbol)) (cond ;caso en ke car arbol es igual a

elem ;caso en ke ambos hijos son #f ((and (eqv? left #f) (eq v? right #f)) '() ) ;caso en ke solo hijo iz quierdo es #f ((and (eqv? left #f) (no t (eqv? right #f))) right ) ;caso en ke solo hijo de recho es #f ((and (not (eqv? left #f )) (eqv? right #f)) left ) ;caso en ke ningun hijo es #f. ((and (not (eqv? left #f )) (not (eqv? right #f))) (if (eqv? (delet e-node (car (minimum right)) right) '()) (list (c ar (minimum right)) left #f) (list (c ar (minimum right)) left (delete-node (car (minimum right)) right)) ) ) ) ;si el car del arbol no es igual a elem (cond (( elem (car arbol)) (if (null? (dele te-node elem right)) (list (c ar arbol) left #f) (list (c ar arbol) left (delete-node elem right)) ) ) ) ) ) ) ) ) )

Contar la cantidad de nodos (define count (lambda (arbol)

(if(null? arbol) 0 (cond ((eqv? arbol #f) 0 ) (else (+ 1 (+ (count (car (cdr arbol))) (count ( car (cddr arbol))) ))) ) ) ) )

Evaluar profundidad (define depth (lambda (arbol) (if (null? arbol) 0 (cond ((eqv? arbol #f) 0 ) (( (depth (car (cdr arbol))) (depth (car (cddr a rbol)))) (+ 1 (depth (car (cdr arbol)))) ) ((= (depth (car (cdr arbol))) (depth (car (cddr arbol)))) (+ 1 (depth (car (cdr arbol)))) ) ) ) ) )

Mximo (define maximum (lambda (arbol) (if (eqv? (car (cddr arbol)) #f) arbol (maximum (car (cddr arbol))) ) ) )

Mnimo (define minimum (lambda (arbol) (if (eqv? (car (cdr arbol)) #f) arbol (minimum (car (cdr arbol)))

) ) )

Buscar elemento (define is-in (lambda (elem arbol) (let func ((elem elem) (arbol arbol)) (if (null? arbol) #f (cond ((eqv? arbol #f) #f ) ((= elem (car arbol)) #t ) (( elem (car arbol)) (is-in elem (car (cddr arbol))) ) ) ) ) ) )

Obtener un elemento (define get (lambda (elem arbol) (let aux ((elem elem) (arbol arbol)) (if (null? arbol) #f (cond ((eqv? arbol #f) #f ) ((= elem (car arbol)) arbol ) (( elem (car arbol)) (get elem (car (cddr arbol))) ) ) ) ) ) )

Pre-order (define pre-order (lambda (arbol) (if(null? arbol) arbol (cond

((eqv? arbol #f) '() ) (else (cons (car arbol) (append (pre-order (ca r (cdr arbol))) (pre-order (car (cddr arbol))))) ) ) ) ) )

In-Order (define in-order (lambda (arbol) (if(null? arbol) arbol (cond ((eqv? arbol #f) '() ) (else (append (append (in-order (car (cdr arbo l))) (list (car arbol))) (in-order (car (cddr arbol)))) ) ) ) ) )

Post-order (define post-order (lambda (arbol) (if(null? arbol) arbol (cond ((eqv? arbol #f) '() ) (else (append (append (post-order (car (cdr ar bol))) (post-order (car (cddr arbol)))) (list (car arbol))) ) ) ) ) )

También podría gustarte