(define-struct nodo (val sx dx)) ;; Un albero-binario-di-numeri e' ;; - l'albero vuoto (empty), oppure ;; - una struttura (make-nodo n s d), dove ;; - n e' un numero ;; - s e d sono alberi-binari-di-numeri ;; Un albero-binario-di-ricerca-di-numeri e' ;; - l'albero vuoto (empty), oppure ;; - una struttura (make-nodo n s d), dove ;; - n e' un numero ;; - i nodi in s contengono numeri minori di n ;; - i nodi in d contengono numeri maggiori di n ;; - s e d sono alberi-binari-di-ricerca-di-numeri ;; maxABR: ABR-di-numeri -> numero ;; a non e' empty (define (maxABR a) (cond [(empty? (nodo-dx a)) (nodo-val a)] [else (maxABR (nodo-dx a))])) (define ABR2 (make-nodo 7 (make-nodo 5 empty empty) (make-nodo 10 (make-nodo 9 empty empty) (make-nodo 20 (make-nodo 15 empty empty) empty)))) ; (maxABR ABR2) ;; removeABR: numero ABR-di-numeri -> ABR-di-numeri (define (removeABR n a) (cond [(empty? a) empty] [(< n (nodo-val a)) (make-nodo (nodo-val a) (removeABR n (nodo-sx a)) (nodo-dx a))] [(> n (nodo-val a)) (make-nodo (nodo-val a) (nodo-sx a) (removeABR n (nodo-dx a)))] [(empty? (nodo-sx a)) (nodo-dx a)] [(empty? (nodo-dx a)) (nodo-sx a)] [else (make-nodo (maxABR (nodo-sx a)) (removeABR (maxABR (nodo-sx a)) (nodo-sx a)) (nodo-dx a))])) (define ABR1 (make-nodo 10 (make-nodo 7 (make-nodo 3 empty empty) (make-nodo 8 empty empty)) (make-nodo 15 empty empty))) ;(removeABR 10 empty) ; empty ;(removeABR 10 ABR1) ;(removeABR 15 ABR1) (removeABR 2 (make-nodo 2 empty empty)) ; empty