Академический Документы
Профессиональный Документы
Культура Документы
ÍNDICE DE CONTENIDOS
Concepto de árbol
Terminología básica
Árboles multicamino o genéricos
Árboles binarios
Árboles de búsqueda
Árboles binarios de búsqueda
ABB equilibrados
AVL
Árboles B, B+ y B*
Árboles - 2
Concepto de árbol
Estructura JERÁRQUICA no lineal
Relaciones padre-hijo entre nodos
Ejemplos: sistema de ficheros, estructura de un
libro, diagrama de clases JAVA, diagrama
organizativo... MiEmpres
a
Venta Producció I+
s n D
Árboles - 3
Concepto de árbol
Un árbol se caracteriza por estar formado por
una serie de nodos conectados por una serie de
aristas que verifican que:
Árboles - 4
Concepto de árbol
Un árbol de tipo base T es:
la estructura vacía, o
un nodo de tipo T con un número finito de
estructuras árbol de tipo base T disjuntas
llamadas subárboles
Árboles - 5
Terminología básica
Raíz: único nodo sin padre
Nodo interno: tiene al
menos un hijo A
Árboles - 7
Terminología básica
Profundidad de un nodo: número de
predecesores
Altura del árbol: profundidad máxima de
cualquier nodo
A
profundidad(A)=0
B C D profundidad(H)=2
altura=3
E F G H
I J K
Árboles - 8
Terminología básica
Camino: existe un camino
del nodo X al nodo Y, si
existe una sucesión de A
nodos que permitan llegar
desde X a Y.
B C D
camino(A,K)={A,B,F,K}
camino(C,K)={} E F G H
I J K
Árboles - 9
Árboles multicamino
Árboles n-arios o Multicamino (NIST):
Árbol en el que cualquier nodo puede tener
cualquier número de hijos
⇓
Árboles con grado ≥ 2
Árboles - 10
Árboles multicamino
Implementación 1
Hijos como array de referencias
Desaprovecha memoria si el número de hijos es muy
variable
No puede usarse si el número de hijos es ilimitado
A
...
class Nodo{
B C D E
Object info;
... ... ... ... Nodo[] hijos;
F G ..........
... ... }
class ArbolMulticamino {
H I J Nodo raiz;
... ... ... ......
}
Árboles - 11
Árboles multicamino
Implementación 2
Hijos como un Vector
Necesitamos dimensionar el vector al crearlo
class Nodo{
A
Object info;
... Vector hijos;
B C D E ...
... ... ... ... }
F G class ArbolMulticamino{
... ... Nodo raiz;
...
H I J
}
... ... ...
Árboles - 12
Árboles multicamino
Implementación 3
Hijos como una lista enlazada
A hijos
B hijos
class Nodo{
siguiente
Object info;
C hijos F hijos ListaEnlazada hijos;
siguiente ...
siguiente
G }
D hijos hijos
class ArbolMulticamino{
siguiente
Nodo raiz;
E hijos H hijos ...
}
siguiente
class ListaEnlazada{
I hijos NodoLE inicio;
}
siguiente
class NodoLE{
J hijos Nodo nodoLista;
NodoLE siguiente;
}
Árboles - 13
Árboles multicamino
Implementación 4 (first child-next sibling binary tree)
Una referencia por cada tipo de relación: hijo/hermano
class Nodo{
Object info;
Nodo hijo;
Nodo hermano;
...
}
class ArbolMulticamino{
Nodo raiz;
...
}
Árboles - 14
Árbol multicamino: operaciones del
TAD
Creación de un árbol crearArbol (nombreArbol)
info(referenciaNodo) → Informacion
Acceso a los nodos
primerHijo(referenciaNodo) → enlace
hijos(referenciaNodo) → {enlace}
eshoja(referenciaNodo) → Booleano
Modificación de los asignarInfo(referenciaNodo, valorInformacion)
nodos añadirHijo(referenciaNodo, valorInfo)
quitarHijo(referenciaNodo, valorInfo)
Árboles - 15
Árbol multicamino: operaciones del
TAD
Tipos de recorridos:
Pre-orden
Post-orden
Árboles - 16
Árbol multicamino: operaciones del
TAD
Recorrido en pre-orden:
2 5 9
1. 2. Reference
Motivations Methods s
6 7 8
3 4 2.1 2.2
2.3
1.1 1.2 Bank
Stock Ponzi
Greed Avidity Robber
Fraud Scheme
y
Árboles - 17
Árbol multicamino: operaciones del
TAD
Recorrido en post-
orden:
postOrden(arbol)
los nodos se visitan Para cada hijo h de arbol
después de haber visitado postOrden(hijo)
a sus hijos procesar(arbol)
9 cs16
/
8
3 7 todo.tx
homeworks programs
t
/ /
1K
1 2 4 5 6
h1c.do h1nc.do DDR.jav Stocks.jav Robot.jav
c c a a a
3K 2K 10K 25K 20K
Árboles - 18
Árbol multicamino: operaciones del
TAD
Recorrido por niveles
1 cs16
/
4
2 3 todo.tx
homeworks programs
t
/ /
1K
5 6 7 8 9
h1c.do h1nc.do DDR.jav Stocks.jav Robot.jav
c c a a a
3K 2K 10K 25K 20K
Árboles - 19
Árbol multicamino: aplicación de
recorridos
Árboles - 20
Ejercicio
Implementar la estructura de datos que
representa un sistema de ficheros
Algunas operaciones:
Cambiar de directorio actual
Crear directorio
Crear archivo
Listar el contenido de un directorio
Árboles - 21
Árbol binario
Es un árbol de grado 2
Cada nodo tiene de 0 a 2 descendientes
directos: el hijo izquierdo y el derecho
D E F G
H I
Árboles - 22
Árbol binario
Aplicación: expresiones aritméticas, árboles
de decisión, búsqueda (ABB)
En algunos casos se exige que el árbol sea
completo = todo nodo interno tiene dos
descendientes.
Árboles - 23
Árbol binario
Ejemplo: expresiones aritméticas
nodo interno: operadores
nodos hoja: operandos
2(a-1))+3b
+
× ×
2 − 3 b
a 1
Árboles - 24
Árbol binario
Ejemplo de aplicación: árboles de decisión
nodo interno: preguntas con respuesta si/no
nodos hoja: decisiones
¿Dónde cenamos?
¿Cómida
rápida?
Sí No
¿Con ¿Cara
café? ?
Sí No Sí No
Árboles - 25
Árbol binario: propiedades
Notación Propiedades
n: número de nodos
e: número de nodos hoja e ≤ 2h
i: número de nodos h≤ i ≤ 2h-1
internos log2(n+1)-1 ≤ h ≤ (n-1)/2
h: altura del árbol 2h+1 ≤ n ≤ 2h+1 -1
Si es completo:
e≥ h+1
e=i+1
Árboles - 26
Árbol binario: operaciones del TAD
Creación de un árbol crearArbol (nombreArbol)
info(referenciaNodo) → Informacion
Acceso a los nodos
izq(referenciaNodo) → enlace
der(referenciaNodo) → enlace
eshoja(referenciaNodo) → Booleano
Modificación de los asignarInfo(referenciaNodo, valorInformacion)
nodos asignarIzq(referenciaNodo, valorEnlace)
asignarDer(referenciaNodo, valorEnlace
Árboles - 27
Árbol binario: recorridos
Hay tres tipos de recorrido en un árbol
binario
in-Orden
pre-Orden
post-Orden
Árboles - 28
Árbol binario: recorridos
Recorrido IN-ORDEN
cada nodo se visita tras visitar su subárbol
izquierdo y antes de visitar el derecho
(izq, raiz, der)
Ejemplo:
h
in-orden: (i, e, h, a, m)
i m
e a
Árboles - 29
Árbol binario: recorridos
Recorrido PRE-ORDEN
primero se visita cada nodo, luego su subárbol
izquierdo y finalmente el derecho
(raiz, izq, der)
Ejemplo:
h
pre-orden: (h, i, e, m, a)
i m
e a
Árboles - 30
Árbol binario: recorridos
Recorrido POST-ORDEN
cada nodo se visita después de visitar su subárbol
izquierdo y después de visitar el derecho
(izq, der, raiz)
Ejemplo:
h
post-orden: (e, i, a, m, h)
i m
e a
Árboles - 31
Ejemplo de recorrido de AB
Ejemplo: Recorridos en las expresiones
aritméticas
pre-orden: notación prefija (polaca)
in-orden: notación normal (sin paréntesis)
post-orden: notación polaca inversa
+ pre-orden: + x 2 - a 1 x 3 b
in-orden: 2 x a - 1 + 3 x b
× × post-orden: 2 a 1 - x 3 b x +
• Ejercicio: escribir el
2 − 3 b pseudocódigo para que el recorrido
en in-orden incluya los paréntesis
a 1
Árboles - 32
Árbol binario: aplicación de recorridos
Dibujar un árbol binario in-orden
x(v) = rango en in-orden de v
y(v) = profundidad de v
Imprimir una expresión aritmética in-orden
Evaluar una expresión aritmética post-orden
Imprimir el índice de un documento pre-orden
Calcular espacio total ocupado por post-orden
una carpeta en sistema de ficheros
Árboles - 33
Árbol binario: Estructura estática
Función p de numeración
por niveles:
Si v es raíz de T, p(v) = 0
Si v es hijo izquierdo de u, 0
p(v)=2·p(u)+1
Si v es hijo derecho de u, 1 2
p(v)=2·p(u)+2
(Recorrido en anchura) 3 4 5 6
Representar el árbol con
un array donde cada nodo 9 10
v se almacena en la
posición p(v) del array
Árboles - 34
Árbol binario: Estructura dinámica
Cada nodo contiene:
Elemento
Nodo hijo izquierdo ∅
Nodo hijo derecho
[Nodo padre]
Árbol = ref. al nodo raíz
B
∅ ∅
B
A D
A D
∅ ∅ ∅ ∅
C E
C E
Árboles - 35