# PLP | Practica 0 ejercicio 5
```haskell
-- Dado el siguiente modelo para arboles binarios:
data AB a = Nil | Bin (AB a) a (AB a) deriving (Show)
-- BIN es un constructor de arboles binarios que recibe un arbol izquierdo, un valor y un arbol derecho
-- Definir las siguientes funciones:
-- a) vacioAB que indica si un arbol es vacio, o sea que no tiene nodos
vacioAB :: AB a -> Bool
vacioAB Nil = True
vacioAB _ = False
-- b) negacion AB que dado un arbol de booleanos construye otro formado por la negacion de cada uno de los nodos
negacionAB :: AB Bool -> AB Bool
negacionAB Nil = Nil -- caso base: si el arbol es vacio, devuelvo el arbol vacio
negacionAB (Bin izq x der) = Bin (negacionAB izq) (not x) (negacionAB der) -- caso recursivo: niego el valor del nodo actual y sigo con los hijos
-- Ejemplo de prueba: negacionAB (Bin (Bin Nil True Nil) False (Bin Nil False Nil)) evalua a Bin (Bin Nil False Nil) True (Bin Nil True Nil)
-- c) productoAB calcula el producto de todos los nodos del arbol
productoAB :: AB Int -> Int
productoAB Nil = 1 -- caso base: si el arbol es vacio, devuelvo 1
productoAB (Bin izq x der) = x * productoAB izq * productoAB der -- caso recursivo: multiplico el valor del nodo actual por el producto de los hijos actual x izq x der```