Está en la página 1de 15

ÁÁ rboles

Estructuras de Datos

M.TL. Juan Carlos González Pinto


Julio 2016
Introduccioó n
• Aparecen estructuras de tipo árbol en:
• Sistemas Operativos: Sistema de ficheros (Árbol de
directorios).
• Compiladores, procesadores de textos, algoritmos de
búsqueda.
• Elementos:
• Nodos.
• Conexiones (dirigidas) entre pares de nodos.
• Un nodo particular: Raíz.
• Cada nodo (excepto raíz) está conectado al menos con
otro (padre). Relación padre-hijo.
2
Conceptos
• Un único camino conduce de la raíz a cada nodo.
• Longitud del camino: Número de conexiones a
atravesar.
• Nodos sin hijos: Hojas (leaves).
• Árbol con N nodos  N-1 conexiones entre nodos.
• Profundidad de un nodo:
• Longitud del camino raíz  nodo.
• Altura de un nodo:
• Longitud del camino desde el nodo a su hoja más
profunda.
• Hermanos: Nodos con el mismo padre (siblings).
3
Conceptos
• El grado de un nodo es el número de flechas que salen
de ese nodo.
• El grado de un árbol es el mayor de los grados que
puede hallarse en el árbol.
• Un camino de un nodo n1 a otro nk, se define como la
secuencia de nodos n1, n2, ... nk tal que ni es padre de ni+1
para 1  i < k.
• Longitud del camino entre 2 nodos, es el número de
arcos que hay entre ellos.

4
Conceptos

• Relación antepasado (u) / descendiente (v):


• Si hay camino de u a v.
• Tamaño de un nodo:
• Número de descendientes (incluyendo al nodo).
• Árbol (definición recursiva):
• o es vacío,
• o consiste en una raíz y cero o más (sub)árboles no
vacíos A1..Ak conectados a la raíz.
5
Implementacioó n
1. Cada nodo contiene:
• Referencias a todos sus hijos.
• Datos almacenados en el nodo.
• Problema: Número de hijos desconocido.
2. Cada nodo:
• Lista con sus hijos.
• Referencia a los datos contenidos.
• Referencia a su nodo hermano.
• Representación "first child / next sibling“.
6
Implementacioó n
nodoRaiz

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

public NodoBinario (Object elemento)


{
dato = elemento;
left = null; right = null;
}
// Métodos... 11
}
Recorridos
• Recorrido:
• Acceso a todos los nodos de un árbol
• Ej: Para realizar una operación en cada nodo
• Fácil implementación mediante recursividad.
• Tipos de recorrido:
• Según el orden en que se "visitan" los nodos.
• Recorrido preorder.
• Recorridos postorder.
• Recorridos inorder.
12
Recorridos
• Recorrido preorden:
1. Nodo raíz
2. Subárbol left en preorden
3. Subárbol right en preorden Preorden
1

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
}

También podría gustarte