n15 Arbolesbinarios Arbolesbinariosordenados
n15 Arbolesbinarios Arbolesbinariosordenados
n15 Arbolesbinarios Arbolesbinariosordenados
Contenido
• Árboles binarios
• Iteradores
• Árboles binarios ordenados
Árboles binarios
• Algunas definiciones para recordar:
- Subárbol - Padre - Hermano - Camino
Ejercicio
• La raíz del árbol es:
• La altura del árbol es:
• El peso del árbol es:
• Hojas?
• Un elemento no terminal?.
• De quién es hijo 15?
• De quién es padre 25?
• Un ejemplo de hermanos.
• El camino entre 10 y 7:
• La longitud del camino entre 10 y 7 es:
• Nivel de 25:
• Es árbol completo? Es árbol lleno?.
• El recorrido en preorden es:
• El recirrido en postorden es :
• El recorrido en inorden es :
• El recorrido por niveles es :
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
5
Árboles binarios
• Formalismo Abstracto
e2
e4 e5
e1
r
e2 e3
e3
a1 a2 e4 e5 e6 e7
e6 e7
• Invariante
{inv: a1 y a2 son disyuntos}
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
6
Árboles binarios
• Se utiliza genericidad
cupi2 collections
Implementación:
Árboles binarios
• Algorítmica básica:
• Es hoja?
• Altura
• Buscar un elemento
Árboles binarios
• Es hoja?
Árboles binarios
• Altura
Árboles binarios
• Buscar un elemento
Árboles binarios
• Buscar un elemento:
Iteradores (cupi2.collections)
Iteradores
• Para recorridos y retornos de secuencias en el árbol
binario.
Árboles e iteradores
• Recorrido en inorden
public class ArbolBinario<T>
{
public Iterador<T> darInorden( )
{
IteradorSimple<T> resultado = new IteradorSimple<T>( darPeso( ) );
if( raiz != null )
{
raiz.inorden( resultado );
}
return resultado;
}
}
Árboles e iteradores
a1 a2
• Invariante
{ inv: a1 y a2 son disyuntos, todos los elementos de a1 son menores que e,
todos los elementos de a2 son mayores que e, a1 y a2 son ordenados}
• Insertar
Árboles binarios ordenados
public class NodoArbolBinarioOrdenado<T extends Comparable<? super T>>
{
public void insertar( T pElemento ) throws ExisteException
{
// Compara el valor con el valor del nodo
int resultado = elem.compareTo( pElemento );
if( resultado == 0 )
{
// Caso 1: El elemento a insertar es el elemento actual
throw new ExisteException( "Elemento presente en el árbol" );
}
else if( resultado > 0 )
{
// Caso 2: El elemento se debe insertar en el subárbol izquierdo
if( izqNodo == null )
izqNodo = new NodoArbolBinarioOrdenado<T>( pElemento );
else
izqNodo.insertar( pElemento );
}
else
{
// Caso 3: El elemento se debe insertar en el subárbol derecho
if( derNodo == null )
derNodo = new NodoArbolBinarioOrdenado<T>( pElemento );
else
derNodo.insertar( pElemento );
}
}
}
20
25 35
10 30
10
5 15 25 35
5 15
10 30
30
5 15 25 35
25 35
10 30 10 30
5 15 25 35 5 15 35
10 30 10 30
5 15 25 35 5 25 35