/*
 * ej-02-03.pl
 *
 * Definir el predicado sumahoja/2 en donde el primer argumento
 * es un arbol binario, y el segundo un entero que corresponde 
 * a la suma de todos los nodos hoja del arbol.
 * Para representar el arbol se utilizara la funcion arbol:
 *       arbol(Raiz, ArbolIzquierdo, ArbolDerecho)
 * y para el nodo hoja sera:
 *       arbol(Entero, nil, nil)
 *
 */

/*
 * sumahoja(Arbol, Suma)
 *
 * nodo interno: nodo(Raiz, ArbolIzquierdo, ArbolDerecho)
 * nodo hoja:    nodo(Entero, nil, nil)
 */

sumahoja(nodo(Entero, nil, nil), Entero).

sumahoja(nodo(Raiz,nil,D), Suma) :-
	sumahoja(D, Suma).

sumahoja(nodo(Raiz,I,nil), Suma) :-
	sumahoja(I, Suma).

sumahoja(nodo(Raiz,I,D), Suma) :-
	sumahoja(I, SumaIzquierda),
	sumahoja(D, SumaDerecha),
	Suma is SumaIzquierda + SumaDerecha.


/* EOF ej-02-03.pl */
