arboles[1]
TRANSCRIPT
La estructura de datos Árboles
Árboles - 2
Í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úsquedaABB equilibradosAVL Árboles B, B+ y B*
Árboles - 3
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...
MiEmpresa
Ventas I+DProducción
Portátiles SobremesaES Internacional
Europa Asia América
Árboles - 4
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ízcada nodo, excepto la raíz, tiene un único padrehay un único camino (desde la raíz hasta cada nodo)
Árboles - 5
Concepto de árbol Un árbol de tipo base T es:
la estructura vacía, oun 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 - 6
Terminología básica
subárbol
A
B DC
G HE F
I J K
Raíz: único nodo sin padre Nodo interno: tiene al
menos un hijo Nodo hoja (externo): no
tiene hijos Descendiente directo:
hijo Descendientes: hijo,
nieto... Subárbol: árbol formado
por un nodo y sus descendientes
Árboles - 7
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 - 8
Terminología básica
Profundidad de un nodo: número de predecesores
Altura del árbol: profundidad máxima de cualquier nodo
A
B DC
G HE F
I J K
profundidad(A)=0profundidad(H)=2altura=3
Árboles - 9
Terminología básica
Camino: existe un camino del nodo X al nodo Y, si existe una sucesión de nodos que permitan llegar desde X a Y.
camino(A,K)={A,B,F,K}
camino(C,K)={}
A
B DC
G HE F
I J K
Árboles - 10
Á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 - 11
Árboles multicamino Implementación 1
Hijos como array de referenciasDesaprovecha memoria si el número de hijos es muy variableNo puede usarse si el número de hijos es ilimitado
class Nodo{Object info;Nodo[] hijos;..........
}class ArbolMulticamino {
Nodo raiz;......
}
...A
...B
...C
...D
...E
...F
...G
...H
...I
...J
Árboles - 12
Árboles multicamino Implementación 2
Hijos como un VectorNecesitamos dimensionar el vector al crearlo
class Nodo{Object info;Vector hijos;...
}class ArbolMulticamino{
Nodo raiz;...
}
...A
...B
...C
...D
...E
...F
...G
...H
...I
...J
Árboles - 13
Árboles multicamino Implementación 3
Hijos como una lista enlazada
class Nodo{Object info; ListaEnlazada hijos;...
}class ArbolMulticamino{
Nodo raiz;...
}class ListaEnlazada{
NodoLE inicio;}class NodoLE{
Nodo nodoLista;NodoLE siguiente;
}
AB
C
hijos
F
E
D
siguiente
hijos
hijos
G
siguientesiguiente
hijos
siguiente
Hhijos
I
siguiente
J
siguiente
hijos
hijos
hijos
hijos
hijos
Árboles - 14
Á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 - 15
Árbol multicamino: operaciones del TAD
asignarInfo(referenciaNodo, valorInformacion)
añadirHijo(referenciaNodo, valorInfo)
quitarHijo(referenciaNodo, valorInfo)
Modificación de los nodos
info(referenciaNodo) InformacionprimerHijo(referenciaNodo) enlacehijos(referenciaNodo) {enlace}eshoja(referenciaNodo) Booleano
Acceso a los nodos
recorrer(nombreArbol,tipoRecorrido)Recorrido del árbol
buscar(nombreArbol, dato) informacionbuscar(nombreArbol, información)referenciaNodo
borrar(nombreArbol, valorInfo) Borrado de nodos
insertar(padre, valorInfo, posicion)
insertar(padre, valorInfo)
arbolVacio(nombreArbol) BooleanoComprobación del estado
crearArbol (nombreArbol)Creación de un árbol
Inserción de nodos
Búsqueda de un nodo
Árboles - 16
Árbol multicamino: operaciones del TAD Tipos de recorridos:
Pre-ordenPost-orden
Por niveles o primero en anchura (level-order traversal)
Árboles - 17
Árbol multicamino: operaciones del TAD Recorrido en pre-orden:
se visita primero la raíz del árbol y luego se visitan recursivamente los subárboles que empiezan en sus hijos
Make Money Fast!
1. Motivations References2. Methods
2.1 StockFraud
2.2 PonziScheme
1.1 Greed 1.2 Avidity2.3 BankRobbery
1
2
3
5
4 6 7 8
9
preOrden(arbol)procesar(arbol)Para cada hijo h de arbol
preorden(hijo)
Árboles - 18
Árbol multicamino: operaciones del TAD Recorrido en post-orden:
los nodos se visitan después de haber visitado a sus hijos
postOrden(arbol)Para cada hijo h de arbol
postOrden(hijo) procesar(arbol)
cs16/
homeworks/todo.txt
1Kprograms/
DDR.java10K
Stocks.java25K
h1c.doc3K
h1nc.doc2K
Robot.java20K
9
3
1
7
2 4 5 6
8
Árboles - 19
Árbol multicamino: operaciones del TAD Recorrido por niveles
se visita por profundidad, de forma descendente y de izquierda a derecha
cs16/
homeworks/todo.txt
1Kprograms/
DDR.java10K
Stocks.java25K
h1c.doc3K
h1nc.doc2K
Robot.java20K
1
2
5
3
6 7 8 9
4
Árboles - 20
Á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 - 21
Ejercicio Implementar la estructura de datos que
representa un sistema de ficheros
Algunas operaciones:Cambiar de directorio actualCrear directorioCrear archivoListar el contenido de un directorio
Árboles - 22
Á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>
<nodo> ::= <info> <izq> <der>
<izq> ::= <arbol>
<der> ::= <arbol>
A
B C
F GD E
H I
Árboles - 23
Á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 - 24
Árbol binario
Ejemplo: expresiones aritméticasnodo interno: operadoresnodos hoja: operandos
2(a-1))+3b
2
a 1
3 b
Árboles - 25
Árbol binario
Ejemplo de aplicación: árboles de decisiónnodo interno: preguntas con respuesta si/nonodos hoja: decisiones
¿Dónde cenamos?
¿Cómida rápida?
¿Con café? ¿Cara?
Starbucks McDonalds Zalacaín VIPS
Sí No
Sí No Sí No
Árboles - 26
Árbol binario: propiedades
Notaciónn: número de nodose: número de nodos hojai: número de nodos internosh: altura del árbol
Propiedades
e 2h h i 2h-1log2(n+1)-1 h (n-1)/2
2h+1 n 2h+1-1
Si es completo:
eh+1e=i+1
Árboles - 27
Árbol binario: operaciones del TAD
asignarInfo(referenciaNodo, valorInformacion)
asignarIzq(referenciaNodo, valorEnlace)
asignarDer(referenciaNodo, valorEnlace
Modificación de los nodos
info(referenciaNodo) Informacionizq(referenciaNodo) enlaceder(referenciaNodo) enlaceeshoja(referenciaNodo) Booleano
Acceso a los nodos
recorrer(nombreArbol,tipoRecorrido)Recorrido del árbol
buscar(nombreArbol, dato) informacionbuscar(nombreArbol, información)referenciaNodo
borrar(nombreArbol, valorInfo) Borrado de nodos
insertar(padre, valorInfo, posicion)
arbolVacio(nombreArbol) BooleanoComprobación del estado
crearArbol (nombreArbol)Creación de un árbol
Inserción de nodos
Búsqueda de un nodo
Árboles - 28
Árbol binario: recorridos
Hay tres tipos de recorrido en un árbol binario
in-Orden
pre-Orden
post-Orden
Árboles - 29
Árbol binario: recorridos
Recorrido IN-ORDENcada nodo se visita tras visitar su subárbol izquierdo y antes de visitar el derecho
(izq, raiz, der)
Ejemplo:
h
i
e
m
a
in-orden: (i, e, h, a, m)
Árboles - 30
Árbol binario: recorridos
Recorrido PRE-ORDENprimero se visita cada nodo, luego su subárbol izquierdo y finalmente el derecho
(raiz, izq, der)
Ejemplo:
h
i
e
m
a
pre-orden: (h, i, e, m, a)
Árboles - 31
Árbol binario: recorridos
Recorrido POST-ORDENcada nodo se visita después de visitar su subárbol izquierdo y después de visitar el derecho
(izq, der, raiz)
Ejemplo:
h
i
e
m
a
post-orden: (e, i, a, m, h)
Árboles - 32
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
2
a 1
3 b
pre-orden: + x 2 - a 1 x 3 bin-orden: 2 x a - 1 + 3 x bpost-orden: 2 a 1 - x 3 b x +
• Ejercicio: escribir el pseudocódigo para que el recorrido en in-orden incluya los paréntesis
Árboles - 33
Árbol binario: aplicación de recorridos Dibujar un árbol binario in-orden
x(v) = rango en in-orden de vy(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-
ordenuna carpeta en sistema de ficheros
Árboles - 34
Árbol binario: Estructura estática Función p de numeración
por niveles:Si v es raíz de T, p(v) = 0Si v es hijo izquierdo de u, p(v)=2·p(u)+1Si v es hijo derecho de u, p(v)=2·p(u)+2
(Recorrido en anchura) Representar el árbol con
un array donde cada nodo v se almacena en la posición p(v) del array
9
3
1
10
0
5 6
2
4
Árboles - 35
Árbol binario: Estructura dinámica Cada nodo contiene:
ElementoNodo hijo izquierdoNodo hijo derecho[Nodo padre]
Árbol = ref. al nodo raíz
B
DA
C E
B
A D
C E