Está en la página 1de 2

C:\Users\jheis\Desktop\Universidad\Semestre 02\FLP\PeñaRamosLopezTaller2FLP17\punto 4 arboles.rkt sábado, 18 de noviembre de 2017 1:33 p. m.

#lang eopl
;;**************FUNDAMENTOS DE LENGUAJE DE PROGRAMACIÓN************************************
;;Jheison Peña Jimenez. Código: 1356434
;;Johan Antonio Ramos Londoño. Código:1765631
;;Walther Humberto Lopez Acevedo. Código: 1456023
;******************************************************************************************
; <arbin> ::= <numero>
; <arbin> ::= (<simbolo> <arbin> <arbin>)
; <simbolo> ::= a|b|c|d|e|f|g|...|z|
; <número> ::= 1|2|3|4|5|6|7|8|9|0
;Definición del tipo árbol
(define-datatype arbin arbin?
(leaf-node (hoja number?))
(interior-node (letra symbol?)
(izquierda arbin?)
(derecha arbin?)))

;función que recibe un árbol, y llama una funcion auxiliar


(define max-interior
(lambda (arbol)
(car (max-interior-arbol arbol) )
))

;funcion que recibe un árbol de max-interior


(define max-interior-arbol
(lambda (arbol)
(cases arbin arbol
(leaf-node (hoja) hoja)
(interior-node (padre izq der) (max-interior-aux padre izq der))
)))

;Función auxiliar que sumas las hojas de un nodo (hoja)


(define suma-max-interior
(lambda (arbol)
(cases arbin arbol
(leaf-node (hoja) hoja)
(interior-node (padre izq der) (+ (suma-max-interior izq) (suma-max-interior der)))
)))

;;Función auxiliar de max-interior-arbol, procede a verificar si ambas hojas son números


entonces seria
;; un arbol tipo tree-a, de lo contrario seria un arbol de tipo tree-b a tree-d.
(define max-interior-aux
(lambda (padre izq der)
(cond
[(and (number? (max-interior-arbol izq))(number? (max-interior-arbol der))) (list
padre (+(max-interior-arbol izq) (max-interior-arbol der)))]
[(number? (max-interior-arbol izq)) (mayor (cons (list padre (+ (max-interior-arbol
izq) (suma-max-interior der))) (list(max-interior-arbol der))))]
[(number? (max-interior-arbol der)) (mayor(cons (list padre (+ (max-interior-arbol
der) (suma-max-interior izq))) (list(max-interior-arbol izq))))]

)))

;funcion auxiliar que verifica que nodo tiene una mayor suma en sus hojas. Si la suma de los
nodos son iguales, se toma el nodo superior.
(define mayor
(lambda (lista)
(cond
[(> (cadar lista)(cadadr lista)) (car lista)]
[(eqv? (cadar lista)(cadadr lista)) (car lista)]
[else (cadr lista)]
)
))

;Creacioón de arboles
(define tree-a (interior-node 'a (leaf-node 2)(leaf-node 3)))
(define tree-b (interior-node 'b (leaf-node -1) tree-a))
(define tree-c (interior-node 'c tree-b (leaf-node 1)))
(define tree-d (interior-node 'd tree-c (leaf-node -2)))

-1-
C:\Users\jheis\Desktop\Universidad\Semestre 02\FLP\PeñaRamosLopezTaller2FLP17\punto 4 arboles.rkt sábado, 18 de noviembre de 2017 1:33 p. m.
;;pruebas
;;(max-interior tree-b)
;;(max-interior tree-c)

-2-

También podría gustarte