Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructuras de Datos
4
Conceptos
sigHermano null
primerHijo
null
null
null null
null null null null null 7
ÁÁ rbol N-ario
• Ningún nodo puede tener más de N hijos.
• El más utilizado: Binario, 2 hijos (left, right).
• Definición recursiva (Árbol binario):
• ... o es vacío.
• ... o tiene raíz, árbol derecho, árbol izquierdo.
• Implementación:
• Conocido el número de hijos. 2 referencias.
8
ÁÁ rboles Binarios
• Árbol binario lleno (full binary tree).
• Todas las hojas tiene la misma profundidad.
• El resto de nodos (no terminales) tienen 2 hijos.
• Árbol binario completo (complete binary tree).
• Cada nivel (excepto el más profundo) debe contener
todos sus posibles nodos.
• En el nivel más profundo, los nodos están lo más a la
izquierda que sea posible.
9
Expresiones
• Un nodo terminal representa un operando.
• El resto de los nodos representan operadores (binarios).
+ 6 + ((7 - 3) * 5)
Evaluación de la expresión:
Evaluación de los
subárboles 6 *
(recursivamente).
Aplicación del operador
- 5
a los valores obtenidos.
7 3 10
Recursividad
• El tipo árbol se define recursivamente.
• Muchas rutinas para manejo de árboles se implementan
fácilmente de forma recursiva.
public class NodoBinario
{
Object dato; dato
NodoBinario left;
NodoBinario right; left right
2 3
// en la clase NodoBinario
public void mostrarPreorden()
{ 4 6
System.out.println(dato);
if (left != null)
left.mostrarPreorden(); 5 7
if (right != null)
right.mostrarPreorden();
} 13
Recorridos
• Recorrido inorden:
1. Subárbol left en inorden
2. Nodo raíz Inorden
2
3. Subárbol right en inorden
1 5
// en la clase NodoBinario 3 7
public void mostrarInorden()
{
if (left != null)
left.mostrarInorden(); 4 6
System.out.println(dato);
if (right != null)
right.mostrarInorden(); 14
}
Recorridos
• Recorrido postorden:
1. Subárbol left en postorden
2. Subárbol right en postorden Postorden
7
3. Nodo raíz
1 6
// en la clase NodoBinario
public void mostrarPostorden() 3 5
{
if (left != null)
left.mostrarPostorden(); 2 4
if (right != null)
right.mostrarPostorden();
System.out.println(dato); 15
}