Sei sulla pagina 1di 35

La estructura de datos Árboles

Í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

E Internaciona Portátile Sobremes


S l s a

Europ Asi Améric


a a a

Á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:

hay un único nodo raíz


cada nodo, excepto la raíz, tiene un único
padre
hay un único camino (desde la raíz hasta cada
nodo)

Á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

<arbol> ::= <<nulo>> | <nodo>


<nodo> ::= <info> {<arbol>}

 Puede estar ordenado o nó

Árboles - 5
Terminología básica
 Raíz: único nodo sin padre
 Nodo interno: tiene al
menos un hijo A

 Nodo hoja (externo): no


tiene hijos B C D
 Descendiente directo:
hijo
E F G H
 Descendientes: hijo,
nieto...
I J K
 Subárbol: árbol formado
por un nodo y sus
descendientes
subárbol
Árboles - 6
Terminología básica
 Grado de un nodo: número de
descendientes directos
 Grado del árbol: mayor grado de sus nodos
 Árbol binario: árbol de grado 2
Cada nodo tiene como mucho dos descendientes
directos
 Árbol multicamino:
Cada nodo puede tener n descendientes directos
 Lista= árbol degenerado de grado 1

Á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)

Comprobación del arbolVacio(nombreArbol) → Booleano


estado de nodos
Inserción insertar(padre, valorInfo, posicion)
insertar(padre, valorInfo)
Borrado de nodos borrar(nombreArbol, valorInfo)

Búsqueda de un nodo buscar(nombreArbol, dato) → informacion


buscar(nombreArbol, información)→referenciaNodo

Recorrido del árbol recorrer(nombreArbol,tipoRecorrido)

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

Por niveles o primero en anchura (level-order


traversal)

Árboles - 16
Árbol multicamino: operaciones del
TAD
 Recorrido en pre-orden:

se visita primero la raíz


preOrden(arbol)
del árbol y luego se procesar(arbol)
visitan recursivamente Para cada hijo h de arbol
los subárboles que preorden(hijo)
empiezan en sus hijos
Make Money
1 Fast!

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

se visita por profundidad, de forma descendente y de


izquierda a derecha

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

 Listar el contenido de un documento


estructurado pre-orden

 Calcular el espacio en disco que ocupa un


directorio post-orden

Á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

<arbol> ::= <<nulo>> | <nodo> A


<nodo> ::= <info> <izq> <der>
<izq> ::= <arbol>
B C
<der> ::= <arbol>

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.

Árbol binario completo Árbol binario no completo

Á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

Starbucks McDonalds Zalacaín VIPS

Á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)

Comprobación del arbolVacio(nombreArbol) → Booleano


estado de nodos
Inserción insertar(padre, valorInfo, posicion)

Borrado de nodos borrar(nombreArbol, valorInfo)

Búsqueda de un nodo buscar(nombreArbol, dato) → informacion


buscar(nombreArbol, información)→referenciaNodo

Recorrido del árbol recorrer(nombreArbol,tipoRecorrido)

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

Potrebbero piacerti anche