;;;;;;;;;;;;;;;;;; ;;;; Arboles binarios de busqueda ;; Constructor (define (cons-arbol nodo rama-i rama-d) (list nodo rama-i rama-d)) ;; Selectores (define (nodo ab) (first ab)) (define (rama-i ab) (second ab)) (define (rama-d ab) (third ab)) ;; El arbol vacio (define el-arbol-vacio ()) ;; predicado para reconocer un arbol binario vacio (define (arbol-vacio? ab) (null? ab)) ;;;;;;; (define (adjunta x ab) (cond ((arbol-vacio? ab) (cons-arbol x el-arbol-vacio el-arbol-vacio)) ((= x (nodo ab)) ab) ((< x (nodo ab)) (cons-arbol (nodo ab) (adjunta x (rama-i ab)) (rama-d ab))) ((> x (nodo ab)) (cons-arbol (nodo ab) (rama-i ab) (adjunta x (rama-d ab)))))) (define (pertenece? x ab) (cond ((arbol-vacio? ab) #f) ((= x (nodo ab)) #t) ((< x (nodo ab)) (pertenece? x (rama-i ab))) (else (pertenece? x (rama-d ab))))) (define (lista->arbol lista) (lista->arbol-aux lista el-arbol-vacio)) (define (lista->arbol-aux l arbol) (if (null? l) arbol (lista->arbol-aux (cdr l) (adjunta (car l) arbol)))) (define (arbol->lista ab) (if (arbol-vacio? ab) () (append (arbol->lista (rama-i ab)) (list (nodo ab)) (arbol->lista (rama-d ab))))) (define (lista long talla) ;; construye una lista de longitud long de n?meros en el intervalo [0,talla) (if (= long 0) () (cons (random talla) (lista (- long 1) talla))))