Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Árboles Binarios
Árboles Binarios
30 60
25 35 80
Árbol binario de búsqueda en Haskell
• a2 :: ÁrbolB Intu
• a2 = NodoB (NodoB (hojaB 25)
• 30
• (hojaB 35))
• 50
• (NodoB VacíoB
• 60
• (hojaB 80))
• where
• hojaB x = NodoB VacíoB x VacíoB
¿Un árbol binario es de búsqueda?
• todosÁrbolB :: (a -> Bool) -> ÁrbolB a -> Bool
• todosÁrbolB p VacíoB = True
• todosÁrbolB p (NodoB i r d) = p r &&
• todosÁrbolB p i && todosÁrbolB p d
• ---------------------------------------------------------------
• esÁrbolBB :: Ord a => ÁrbolB a -> Bool
• esÁrbolBB VacíoB = True
• esÁrbolBB (NodoB i r d) = todosÁrbolB (< r) i &&
• todosÁrbolB (>r) d &&
• esÁrbolBB i &&
• esÁrbolBB d
• Si el dato que buscamos no es la raíz sólo hay
que buscar en uno de los subárboles de modo
que como máximo se realizan tantas
comparaciones como profundidad tenga el
árbol.
• Dado que es posible almacenar datos
en un árbol de profundidad n, el algoritmo es
de orden lg n.
• La ganancia es significativa, frente a utilizar
una lista, ya que con esta estructura puede ser
necesario realizar n comparaciones
Busca un elemento, en un árbol
binario de búsqueda
• perteneceBB :: Ord a => a -> ÁrbolB a -> Bool
• perteneceBB x VacíoB = False
• perteneceBB x (NodoB i r d)
• | x == r = True
• | x < r = perteneceBB x i
• | otherwise = perteneceBB x d
Inserta un elemento, en un árbol
binario de búsqueda
• lOrdAÁrbolBB [1..8]