5._Arboles_2012
-
Upload
natalia-albarengue -
Category
Documents
-
view
43 -
download
1
Transcript of 5._Arboles_2012
PROGRAMACION II - 2010
Arboles
ARBOLES
� Definición formal:
conjunto finito T de uno o más nodos tales que:• a) existe un nodo especialmente designado,
llamado raíz del árbol, raíz(T); y
Programación II, Universidad Católica del Uruguay 22012
llamado raíz del árbol, raíz(T); y
• b) Los restantes nodos (excluyendo la raíz), están distribuídos en m >= 0 conjuntos disjuntos T1,.. ,Tm, y cada uno de estos conjuntos es, a su vez, un árbol. Los árboles T1,.. ,Tm son llamados “subárboles” de la raíz.
Un árbol visto recursivamente
Raíz
Programación II, Universidad Católica del Uruguay 32012
ARBOLES
� Otra definición formal y recursiva: Una estructura de árbol, con tipo base T, es• La estructura vacía o
• Un nodo del tipo T con un número finito de estructuras arborescentes disjuntas asociadas, del tipo base T, llamadas “subárboles”
Programación II, Universidad Católica del Uruguay 42012
llamadas “subárboles”
� De acuerdo a esta definición, similar a la correspondiente para listas, puede verse que éstas son un caso particular de los árboles.
¿qué es un Arbol?
� En ciencias de la computación, un árbol es un modelo abstracto de una estructura jerárquica
� Un árbol consiste de nodos con una relación padre-hijo
Computadoras UCU
Ventas I&DProducción
Programación II, Universidad Católica del Uruguay 52012
� Aplicaciones:
• Organigramas
• Sistemas de archivos
• Entornos de programación
Laptops DesktopsUy Internacional
Europa Asia América
Terminología de árboles genéricos
� Grado: número de subárboles de un nodo.
� Nodo terminal y nodo interno: nodo terminal es el que tiene grado cero, también llamado “hoja”. Un nodo interno es aquél que no es terminal.
Programación II, Universidad Católica del Uruguay 62012
terminal.
� Nivel de un nodo respecto a la raíz: la raíz tiene nivel 0, y otros nodos tienen un nivel que es superior en uno al que tiene con respecto al subárbol Tj, de la raíz, que los contiene.
Terminología de Arboles
� Raíz: nodo sin padre (A)
� Nodo interno: nodo con por lo menos un hijo (A, B, C, F)
� Nodo externo (hoja): nodo sin hijos(E, I, J, K, G, H, D)
� Ancestros de un nodo: padre, abuelo,
A
� Subárbol : árbol que consiste en un nodo y sus descendientes
Programación II, Universidad Católica del Uruguay 72012
subárbol
� Ancestros de un nodo: padre, abuelo, bisabuelo, etc...
� Nivel o Profundidad de un nodo: número de ancestros
� Altura de un árbol: máxima profundidad de un nodo(3)
� Descendiente de un nodo: hijo, nieto, bisnieto, etc.
B DC
G HE F
I J K
ARBOLES
G GNivel 3
Programación II, Universidad Católica del Uruguay 82012
A
C
D E F
B
A
C
EFD
BNivel 1
Nivel 2
Nivel 0
Altura y profundidad o nivel
Nodo Altura Nivel
Programación II, Universidad Católica del Uruguay 92012
ARBOLES
� Representación :• La raíz arriba, las hojas abajo.
• Se dice que cada raíz es el “padre” de las raíces de sus subárboles, los cuales son llamados “hermanos”.
Programación II, Universidad Católica del Uruguay 102012
“hermanos”.
• Los subárboles son llamados “hijos” de su “padre”.
• La raíz del árbol total no tiene padre.
• Ancestros y descendientes.
Arbolesbinarios
Recorridos de los árboles genéricos
� Un recorrido visita los nodos del árbol de una forma sistemática
� Los recorridos u ordenamientos se definen recursivamente como sigue:• Si un árbol A es nulo, entonces el listado de los nodos de A en
preorden, inorden o postorden, es la lista vacía.
Programación II, Universidad Católica del Uruguay 112012
preorden, inorden o postorden, es la lista vacía.
• Si A contiene un sólo nodo, entonces ese nodo constituye el listado en los tres órdenes.
A1 A2 Ak
n
...
Recorridos de Arboles genéricos
� Preorden : Raíz de A, seguido de los nodos de A1 en preorden, luego los de A2 en preorden, etc.
� Inorden : Nodos de A1 en inorden, luego la raíz, luego los nodos de los restantes
Programación II, Universidad Católica del Uruguay 122012
raíz, luego los nodos de los restantes subárboles en inorden.
� Postorden: Nodos de A1 en postorden, luego los de A2 en postorden, hasta el final, y luego la raíz.
Recorrida en Preorden
� En un recorrido en preorden, un nodo es visitado antes que sus descendientes
� Aplicación: imprimir un documento estructurado
Algoritmo preOrden(v)visitar(v)Para cada hijo w de v
preorden(w)
Programación II, Universidad Católica del Uruguay 132012
documento estructurado
Informe TDAArbol
1. Introducción Casos2. Métodos
2.1 Insertar 2.2 Buscar1.1 General 1.2 Aplicación 2.3 Eliminar
1
2
3
5
46 7 8
9
Recorrida en Postorden
� En un recorrido en postorden, un nodo es visitado después de sus descendentes
� Aplicación: calcular el espacio usado por archivos en un directorio y sus subdirectorios
Algoritmo postOrden(v)Para cada hijo w of v
postOrden(w)visitar(v)
Programación II, Universidad Católica del Uruguay 142012
subdirectorios
p2/
trabajos/todo.txt1K
programas/
DDR.java10K
Stocks.java25K
h1c.doc3K
h1nc.doc2K
Robot.java20K
9
3
1
7
2 4 5 6
8
El TDA ARBOL. Operaciones a ser consideradas
� Padre(unNodo).
� HijoIzquierdo(unNodo).
� HermanoDerecho(unNodo).
� Etiqueta(unNodo).
Programación II, Universidad Católica del Uruguay 152012
� Raiz.
� Anula.
� Otros??. (p.ej. Altura)
Arboles Binarios
� Un Arbol Binario es un Arbol con las siguientes propiedades:• Cada nodo interno tiene como máximo
dos hijos (exactamente dos paraárboles binarios completos)
• Los hijos de un nodo son un par ordenado
� Los hijos de un nodo interno se denominan Hijo Izquierdo e Hijo
� Applicaciones:• Expresiones aritméticas
• Procesos de decisión
• Búsqueda
A
Programación II, Universidad Católica del Uruguay 162012
denominan Hijo Izquierdo e HijoDerecho
� Definiciones alternativas:• Un árbol con un sólo nodo, o un árbol
cuya raíz tiene un par ordenado de hijos, cada uno de los cuales es a suvez un árbol binario
• Conjunto finito de nodos, que puede estar vacío o consistir de una raíz y dos árboles binarios disjuntos, llamados subárbol izquierdo y derecho de la raíz.
B C
F GD E
H I
Arbol de Expresión Aritmética
� Arbol binario asociado con una expresión aritmética:• Nodos internos: operadores
• Nodos externos: operandos
� Ejemplo: árbol de expresión aritmética para la expresión (2 ×××× (a −−−− 1) ++++ (3 ×××× b))
Programación II, Universidad Católica del Uruguay 172012
+
××
−2
a 1
3 b
Aplicación de Arbol Binario: Arbol de Decisión
� Arbol binario asociado con un proceso de decisión
• Nodos internos : preguntas con respuestas si / no
• Nodos externos : decisiones
� Ejemplo: decisión de cena
Programación II, Universidad Católica del Uruguay 182012
¿comida rápida?
¿qué tal un café? ¿cuentas de gastos?
Starbucks La Pasiva La Vaca Nuevo García
Si No
Si No Si No
Recorrido en Inorden de un árbol binario
� En un recorrido en inorden el nodo es visitado después que su subárbol izquierdo y antes que su subárbol derecho
Algoritmo inOrden(v)Si tieneHijoIzquierdo(v)
inOrden (HijoIzquierdo (v))visitar(v)Si tieneHijoDerecho(v)
Programación II, Universidad Católica del Uruguay 192012
Si tieneHijoDerecho(v)inOrden (HijoDerecho(v))
3
1
2
5
6
7 9
8
4
Impresión de expresiones aritméticas
� Especialización del recorrido en inorden
• Imprimir el operando u operador al visitar el nodo
• Imprimir “(“ antes de recorrer el subárbol izquierdo
• Imprimir “)“ después de recorrer el subárbol derecho
Algoritmo printExpression(v)Si tieneHijoIzquierdo (v)
imprimir (“(’’)printExpression(HijoIzquierdo(v))
imprimir (v.element())
Programación II, Universidad Católica del Uruguay 202012
Imprimir “)“ después de recorrer el subárbol derecho
imprimir (v.element())Si tieneHijoDerecho (v)
printExpression(HijoDerecho(v))print (“)’’)
+
××
−2
a 1
3 b((2 × (a − 1)) + (3 × b))
Evaluar expresiones aritméticas
� Especialización del recorrido en postorden
• Método recursivo que retorna el valor de un subárbol
• Al visitar un nodo interno, combinalos valores de los subarboles
Algoritmo evalExpr(v)Si esHoja(v)
devolverv.element ()sino
x ← evalExpr(HijoIzquierdo (v))y ← evalExpr(HijoDerecho(v))
Programación II, Universidad Católica del Uruguay 212012
y ← evalExpr(HijoDerecho(v))◊← operador contenido en vdevolverx ◊ y+
××
−2
5 1
3 2
Ejercicios Arboles Binarios
� Defina árbol binario. Dé un ejemplo de organización usando esta estructura.
� Represente la siguiente expresión aritmética utilizando un árbol binario:
a - (b * (c + d / (f + g)) + h * (i - j * (k + l)))
y dé un algoritmo para, utilizando este árbol, evaluar la expresión cuando las variables toman valores.
Programación II, Universidad Católica del Uruguay 222012
expresión cuando las variables toman valores.
� El recorrido en preorden de un cierto árbol binario produce
ADFGHKLPQRWZ
y el recorrido en inorden produce
GFHKDLAWRQPZ
Dibuje el árbol binario correspondiente.
Ejercicios Arboles Binarios
Sean p(x), s(x) e i(x) las posiciones del nodo x en preorden, postorden e inorden respectivamente. •Marque en el cuadro siguiente las posiciones que pu eden ser ciertas simultáneamente.
i(n) < i(m) s(n) < s(m) p(n) < p(m)
n es ancestro de m
Programación II, Universidad Católica del Uruguay 232012
n es ancestro de m
n es descendiente de m
n está a la izquierda de m
n está a la derecha de m
Ejercicios Arboles Binarios
� Escriba un algoritmo para contar las hojas de un árbol binario
� Dado un árbol binario de elementos de tipo entero, escriba un algoritmo que calcule la suma de todos los elementos.
Programación II, Universidad Católica del Uruguay 242012
suma de todos los elementos.
� Escribir un algoritmo que determine la cantidad de nodos que se encuentran en un árbol binario en un nivel n
ARBOL BINARIO DE BUSQUEDA
� Se dice que un árbol binario es de búsqueda si está organizado de forma que:• para cada nodo t
i todas las claves del subárbol
izquierdo de ti son menores que la clave de t
i y
Programación II, Universidad Católica del Uruguay 252012
izquierdo de ti son menores que la clave de t
i y
todas las claves del árbol derecho son mayores.
� Si el árbol tiene n nodos y está balanceado, su altura será de log(n)
� Una búsqueda en este caso puede tomar log(n) comparaciones o menos.
ARBOL BINARIO DE BUSQUEDA
TDAArbolBinario
Raiz : ElementoArbolBinarioPrimitivas
Buscar (unaEtiqueta) : ElementoArbolBinario .......ArbolBinario.Buscar(unaEtiqueta)
Programación II, Universidad Católica del Uruguay 262012
ArbolBinario.Buscar(unaEtiqueta)COM
resultado = nulosi Raiz <> nulo ENTONCES
resultado = Raiz.Buscar(unaEtiqueta)Devolver resultado
FIN
ARBOL BINARIO DE BUSQUEDA
TDA ElementoArbolBinario
Etiqueta : TipoEtiqueta
HijoIzquierdo,HijoDerecho : ElementoArbolBinario
Operaciones
Programación II, Universidad Católica del Uruguay 272012
Operaciones
Insertar(unElementoArbolBinario)
Buscar(unaEtiqueta)
Eliminar(unaEtiqueta)...
ARBOL BINARIO DE BUSQUEDA
ElementoArbolBinario.Buscar(unaEtiqueta) : ElementoArbolBinario
COMRESULTADO = nuloSI unaEtiqueta = Etiqueta ENTONCES RESULTADO = THIS
SINOSI unaEtiqueta < Etiqueta ENTONCES
SI HijoIzquierdo <> nulo ENTONCES RESULTADO = HijoIzquierdo.Buscar(unaEtiqueta)
Programación II, Universidad Católica del Uruguay 282012
RESULTADO = HijoIzquierdo.Buscar(unaEtiqueta)FINSI
SINO SI HijoDerecho <> nulo ENTONCES
RESULTADO = HijoDerecho.Buscar(unaEtiqueta) FINSI
FINSIFINSIdevolver RESULTADOFIN
Búsqueda e Inserción en árboles binarios
ArbolBinario.Insertar(unElementoArbolBinario)COMSI Raiz = nulo ENTONCES
Raiz = unElementoArbolBinarioSINO
Programación II, Universidad Católica del Uruguay 292012
SINORaiz.Insertar(unElementoArbolBinario)
FIN
Búsqueda e Inserción en árboles binarios
ElementoArbolBinario.Insertar(UnNodoArbolBinario);COMSI Etiqueta = unElementoArbolBinario.Etiqueta ENTONCES
SALIR // ya está en el árbolFINSI SI unElementoArbolBinario.Etiqueta < Etiqueta ENTONCES
SI HijoIzquierdo = nulo ENTONCES
Programación II, Universidad Católica del Uruguay 302012
SI HijoIzquierdo = nulo ENTONCES HijoIzquierdo �UnNodoArbolBinario
SINO HijoIzquierdo.Insertar(UnNodoArbolBinario)FINSI
SINO SI HijoDerecho = nulo ENTONCES
HijoDerecho �unElementoArbolBinarioSINO HijoDerecho.Insertar(unElementoArbolBinario)FINSI
FINSIFIN
Búsqueda e Inserción en árboles binarios
Jorge
. .
Ana
. .
Walter
Pedro
. .
María
Norma
Pablo
Programación II, Universidad Católica del Uruguay 312012
Ana
. .Walter
. .María
. .Pablo
. .
TDATPalabra
clave stringcuenta integerizquierdo, derecho: TPalabra
CrearArbolAbrirArchivoMIENTRAS NO FIN ARCHIVO HACER
LEER (archivo, palabra);Arbol.Insertar(palabra);
end;
Ejemplo: árbol lexicográfico
� Indice de referencias cruzadas.
procedure Busca (var LaPalabra: PPalabra);varpalabra: PPalabra; LaLinea:PLínea;
beginpalabra := LaPalabra;if p1 = nil thenbegin
new (palabra); new (linea)
type
PLinea = ^TLinea;TLinea = record
linea : word ;Proximo: PLinea;
Programación II, Universidad Católica del Uruguay 322012
new (palabra); new (linea)with palabra^ do
beginclave := PalabraActual; izquierdo := nil ; derecho := nil ;primero := LaLinea; ultimo := LaLinea;
end ;LaLinea^.linea := LineaActual;LaLinea^.Proximo := nil ; LaPalabra := palabra;
end elseif PalabraActual < palabra^.clave then Busca(palabra^.izquierdo)
else if PalabraActual > palabra^.clave then Busca(palabra^.derecho) else
beginnew (LaLinea); LaLinea^.linea := LineaActual;LaLinea^.Proximo := nil ; palabra^.ultimo^.Proximo := LaLinea;palabra^.ultimo := LaLinea
end;end ;
Proximo: PLinea;end ;
PPalabra = ^TPalabra;TPalabra = record
clave: string ;
primero, ultimo: PLinea;izquierdo,
derecho: PPalabra;end ;
varLineaActual: word;PalabraActual: string;
Búsqueda y eliminación en árboles binario de búsqueda
•Se busca el nodo con la etiqueta a eliminar.•Si no existe un nodo con esa etiqueta, la eliminación es infructuosa.•Si existe y es una hoja, se elimina el nodo directamente.•Si no es una hoja, pero le falta alguno de sus dos sub
Programación II, Universidad Católica del Uruguay 332012 Programación II, Universidad Católica del Uruguay 332009
•Si no es una hoja, pero le falta alguno de sus dos sub árboles, la operación es sencilla, ya que basta con una reasignación de referencias.•Si el nodo a eliminar es un nodo interno completo, deben sustituirse sus datos y etiqueta por el los del nodo de mayor etiqueta de su sub árbol izquierdo (su “inmediato anterior” en el orden lexicográfico dado ).•Luego se elimina ese elemento, que será una hoja, o le faltará el sub árbol derecho.
ELIMINACION EN ARBOL BINARIO DE BUSQUEDA
10
18
15
138
5
3
10
18
15
8
5
3
Programación II, Universidad Católica del Uruguay 342012
10
18
8
5
3
10
18
8
3
8
183
(a)
(c) (d) (e)
(b)
eliminación
Programación II, Universidad Católica del Uruguay 352012
Eliminación
� Eliminación del nodo 5 con 1 hijo: (a) antes y (b) después
Programación II, Universidad Católica del Uruguay 362012
Eliminación
� Eliminación del nodo 2 con dos hijos: (a) antes y (b) después
Programación II, Universidad Católica del Uruguay 372012
Eliminación en árbol binario de búsqueda� ArbolBinario.Min
� COM� RESULTADO = nulo� SI Raiz <> nulo RESULTADO = Raiz.encontrarMin� devolver RESULTADO� FIN
� Arbolbin.Max
� COM
� RESULTADO = nulo� SI Raiz <> nulo RESULTADO = Raiz.encontrarMax
Programación II, Universidad Católica del Uruguay 382012
� SI Raiz <> nulo RESULTADO = Raiz.encontrarMax� devolver RESULTADO� FIN
� NodoArbolBinario.encontrarMin� COM� RESULTADO = THIS� SI HijoIzq <> nulo RESULTADO = HijoIzq.encontrarMin� devolver RESULTADO� FIN� NodoArbolBinario.encontrarMax� COM� RESULTADO = THIS� SI HijoDer <> nulo RESULTADO = HijoDer.encontrarMax� devolver RESULTADO� FIN
Búsqueda y eliminación en árboles binarios de búsqueda
ArbolBinario.Eliminar(UnaEtiqueta): Tipo LógicoCOMSI Raiz = nulo ENTONCES
DEVOLVER falsoSINO
Programación II, Universidad Católica del Uruguay 392012 Programación II, Universidad Católica del Uruguay 39
SINOSI Raíz.Etiqueta <> UnaEtiqueta ENTONCES
Devolver Raiz.BuscaParaQuitar(UnaEtiqueta) SINO
Raiz � Raiz.QuitarDEVOLVER verdadero
FIN SIFIN SI
FIN
Búsqueda y Eliminación en árboles binarios de búsquedaElementoArbolBinario.BuscaParaQuitar(UnaEtiqueta): boolean;COMSI unaEtiqueta < Etiqueta ENTONCES
SI HijoIzquierdo = nulo ENTONCES DEVOLVER falso // la etiqueta buscada no se encuentra en el arbol
SINO SI HijoIzquierdo.Etiqueta <> UnaEtiqueta ENTONCES // puede estar en el HI pero más abajoDEVOLVER HijoIzquierdo.BuscaParaQuitarUnaEtiqueta)
SINO HijoIzquierdo � HijoIzquierdo.Quitar // hace las sustituciones necesariasDEVOLVER verdadero
Programación II, Universidad Católica del Uruguay 402012 Programación II, Universidad Católica del Uruguay 40
DEVOLVER verdaderoFIN SI
FIN SISINO SI unaEtiqueta > Etiqueta ENTONCES
SI HijoDerecho = nulo ENTONCES DEVOLVER falso
SINO SI HijoDerecho.Etiqueta <> UnaEtiqueta ENTONCESDEVOLVER HijoDerecho.BuscaParaQuitar(UnaEtiqueta)
SINO HijoDerecho � HijoDerecho.QuitarDEVOLVER verdadero
FIN SIFIN SI
FIN SIFIN
Búsqueda y Eliminación en árboles binarios de búsqueda
ElementoArbolBinario.Quitar: Tipo ElementoArbolBina rio;
COMSI EsHoja ENTONCES
DEVOLVER nuloSINO
SI HijoIzquierdo = nulo ENTONCESDEVOLVER HijoDerecho
SINO SI HijoDerecho = nulo ENTONCES
Programación II, Universidad Católica del Uruguay 412012 Programación II, Universidad Católica del Uruguay 41
SINO SI HijoDerecho = nulo ENTONCES DEVOLVER HijoIzquierdo
SINO // No le falta ningún hijoElInmediatoAnterior � HijoIzquierdo.ElementoMayor // hoja, o la falta el hijo derechoCopiarDatos(ElInmediatoAnterior)buscaParaQuitar(ElInmediatoAnterior.Etiqueta);DEVOLVER THIS
FIN SIFIN SI
FIN SIFIN
Búsqueda y Eliminación en árboles binarios de búsqueda
ElementoArbolBinario.ElementoMayor: Tipo ElementoAr bolBinario;
// Devuelve el elemento con mayor clave en un árbol binario de búsqueda
ElementoArbolbinario Aux
COM
Programación II, Universidad Católica del Uruguay 422012 Programación II, Universidad Católica del Uruguay 42
COMAux � THISMIENTRAS Aux.HijoDerecho <> nulo ENTONCES
Aux � Aux.HijoDerechoFIN MIENTRASDEVOLVER Aux
FIN
Vista recursiva usada para calcular el tamaño de un árbol ST = SL + SR + 1
Programación II, Universidad Católica del Uruguay 432012
Vista recursiva usada para calcular la altura de un nodo:
HT = Max (HL + 1, HR + 1)
Programación II, Universidad Católica del Uruguay 442012
ARBOL BINARIO COMPLETO
1
2 3
Programación II, Universidad Católica del Uruguay 452012
5
1110
20 21 22 23
4
98
16 17 18 19
7
15
6
12
24 25
13 14
Propiedades de los Arboles Binarios Completos
� Notación
n número de nodos
e número de nodos
externos
i número de nodos
internos
h altura
� Propiedades:
• e ==== i ++++ 1
• n ==== 2e −−−− 1
• h ≤≤≤≤ i
• h ≤≤≤≤ (n −−−− 1)////2• e ≤≤≤≤ 2h
Programación II, Universidad Católica del Uruguay 462012
h altura • e ≤≤≤≤ 2h
• h ≥≥≥≥ log2 e
• h ≥≥≥≥ log2 (n ++++ 1) −−−− 1
Análisis de Búsqueda e Inserción en Arbol Binario de Búsqueda
� Los algoritmos de inserción y búsqueda analizados no controlan el balanceo del árbol.
� Se desconoce a priori la forma en que el árbol ha de crecer.
� Si el árbol estuviera balanceado, para encontrar una clave se precisarían
Programación II, Universidad Católica del Uruguay 472012
encontrar una clave se precisarían aproximadamente log n comparaciones.
� El peor caso se da para n/2 comparaciones.
� El problema es encontrar la cantidad promedio de comparaciones.
� n claves, n! árboles correspondientes a n! permutaciones de claves.
Ejercicios Arboles Binarios de Búsqueda
� ¿Qué es un árbol binario de búsqueda? Desarrolle el algoritmo de búsqueda correspondiente y evalúe su rendimiento.
� Desarrolle el algoritmo de eliminación en árbol binario de búsqueda y evalúe su rendimiento
Programación II, Universidad Católica del Uruguay 482012
rendimiento
� Muestre el resultado de insertar los elementos 3,1,4,6,9,2,5 y 7 en un árbol binario de búsqueda inicialmente vacío. Muestre después el resultado de eliminar la raíz
Arboles Balanceados
� Criterio de Adelson, Velskii y Landis:
• Un árbol está balanceado si y sólo si para cada nodo las alturas de sus dos subárboles difieren a lo sumo en 1.
Programación II, Universidad Católica del Uruguay 492012
subárboles difieren a lo sumo en 1.
• Asegura un O log(n) en el peor caso para las tres operaciones: búsqueda, inserción y eliminación.
• Se demuestra con la ayuda de los árboles de Fibonacci.
(a) Arbol balanceado altura log N; (b) árbol no balanceado, altura N – 1.
Programación II, Universidad Católica del Uruguay 502012
Arboles binarios de búsqueda posibles insertando las claves 1, 2 y 3 de diferentes maneras
Programación II, Universidad Católica del Uruguay 512012
Arboles de Fibonacci de alturas 2, 3 y 4
2 3 5
T2 T3 T4
Programación II, Universidad Católica del Uruguay 522012
2
1
3
42
1
5
7
4
3
2
61
ARBOLES BALANCEADOS
8
10
6
4
2
C
A
B
B
A
Desbalanceados
Programación II, Universidad Católica del Uruguay 532012
A
BB
CA
Balanceados
ARBOLES BALANCEADOS
� Inserción balanceada.
4
57
5
4
4
5
5
74
Programación II, Universidad Católica del Uruguay 542012
74
5
7
4
2
1
5
7
2
5
74
2
1
ARBOLES BALANCEADOS
� Inserción balanceada (cont.)
5
72
1 4
5
4
2
3 71
Programación II, Universidad Católica del Uruguay 552012
1
3
4 3 71
4
5
3
2
1
7
6
6
4
2
3 71 5
Arboles Balanceados
� Criterio de Adelson, Velskii y Landis:
• Un árbol está balanceado si y sólo si para cada nodo las alturas de sus dos subárboles difieren a lo sumo en 1.
Programación II, Universidad Católica del Uruguay 562012
subárboles difieren a lo sumo en 1.
• Asegura un O log(n) en el peor caso para las tres operaciones: búsqueda, inserción y eliminación.
• Se demuestra con la ayuda de los árboles de Fibonacci.
AVL
� Una inserción o eliminación puede destruir el balance
� Se debe revisar la condición de balance y corregir si es necesario
� Después de la Inserción, sólo los nodos que se encuentran en el camino desde el punto de
Programación II, Universidad Católica del Uruguay 572012
encuentran en el camino desde el punto de inserción hasta la raíz pueden tener el balance alterado
� Si se repara correctamente el equilibrio del nodo desequilibrado más profundo, se recupera el equilibrio de todo el árbol
Diferentes condiciones de desequilibrio
� Supongamos que X es el nodo cuyo equilibrio queremos ajustar
� Se pueden dar cuatro casos:1. Inserción en el subárbol izquierdo del hijo izquierdo de X
2. Inserción en el subárbol derecho del hijo izquierdo de X
Inserción en el subárbol izquierdo del hijo derecho de X
Programación II, Universidad Católica del Uruguay 582012
3. Inserción en el subárbol izquierdo del hijo derecho de X
4. Inserción en el subárbol derecho del hijo derecho de X
� 1 y 4 son simétricos respecto a X
� 2 y 3 son simétricos respecto a X
Rotación Simple para resolver el caso 1
L
L
Programación II, Universidad Católica del Uruguay 592012
a) Antes de la rotación b)Después de la rotación
La rotación simple balancea el árbol después de la inserción del 1.
Programación II, Universidad Católica del Uruguay 602012
a) Antes de la rotación b)Después de la rotación
Rotación simple simétrica para resolver el caso 4
R
R
Programación II, Universidad Católica del Uruguay 612012
a) Antes de la rotación b)Después de la rotación
La rotación simple no resuelve el caso 2.
Programación II, Universidad Católica del Uruguay 622012
a) Antes de la rotación b)Después de la rotación
Rotación doble LR para resolver el caso 2
L
R
Programación II, Universidad Católica del Uruguay 632012
a) Antes de la rotación b)Después de la rotación
Rotación doble restablece el balance después de la inserción del 5.
Programación II, Universidad Católica del Uruguay 642012
a) Antes de la rotación b)Después de la rotación
Rotación doble RL para resolver el caso 3.
L
R
Programación II, Universidad Católica del Uruguay 652012
a) Antes de la rotación b)Después de la rotación
CASO 1 LL TElementoAB rotacionLL ( TElementoAB k2 )
{TElementoAB k1 = k2.hijoIzq;
k2. hijoIzq = k1.hijoDer;k1. hijoDer = k2;return k1;
}
CASO 4 RRCASO 4 RRTElementoAB rotacionRR (TElementoAB k1 )
{TElementoAB k2 = k1.hijoDer;
k1. hijoDer = k2.hijoIzq;k2.hijoIzq = k1;return k2;
}2012 66Programación II, Universidad Católica del Uruguay
CASO 2 LR
TElementoAB rotacionLR ( TElementoAB k3 ){
k3. hijoIzq = rotacionRR( k3. hijoIzq );return rotacionLL( k3 );
}
CASO 3 RLCASO 3 RLTElementoAB rotacionRL ( TElementoAB k1 )
{k1. hijoDer = rotacionLL( k1. hijoDer );return rotacionRR( k1 );
}
2012 67Programación II, Universidad Católica del Uruguay
Ejercicios Arboles AVL
� ¿Qué es un Arbol Binario Balanceado – AVL? Describa las situaciones de desbalanceo posibles (ilustre con ejemplos) y qué operaciones se deben aplicar en cada caso para restituir la condición de AVL.
� Defina árbol balanceado. Describa una estructura de datos apta para implementarlo. Desarrolle el algoritmo de búsqueda e inserción en árbol balanceado. Ilustre el funcionamiento mediante un ejemplo. ¿Cuál es el orden del tiempo de ejecución del mismo?
� Insertar en un árbol AVL las siguientes claves, en el orden indicado,8, 5, 2, 1, 20, 15, 16, 17,7
Programación II, Universidad Católica del Uruguay 682012
8, 5, 2, 1, 20, 15, 16, 17,7mostrando la evolución del árbol. Luego eliminar las clave 15 y 7, mostrando los pasos.
� Muestre el resultado de insertar en un árbol AVL las siguientes claves, en el orden indicado,
2,1,4,5,9,3,6, 7mostrando la evolución del árbol. Luego muestre el resultado de eliminar las clave 4, 5 y 9, mostrando la evolución
� Insertar en un árbol AVL las siguientes claves, en el orden indicado1,88,77,4,5,9,18,56,33,21,45,99,22
mostrando la evolución del árbol. Luego eliminar las clave 18, 77, 1 y 45mostrando los pasos.
Ejercicios Arboles AVL
� Weiss – Cuestiones Breves• 18.3 y 18.4
� Weiss – Problemas teóricos• 18.9
• 18.10
Programación II, Universidad Católica del Uruguay 692012
ARBOLES
� Otros conceptos: similaridad• Se dice que dos árboles binarios, T y T’ son “similares” si tienen la misma estructura:
� a) ambos están vacíos o
� b) ambos no están vacíos y sus subárboles izquierdo y derecho son respectivamente similares.
Programación II, Universidad Católica del Uruguay 702012
derecho son respectivamente similares.
� existe una correspondencia uno a uno entre los nodos de T y T’ que preserva la estructura: Si los nodos u1 y u2 en T corresponden respectivamente a u1’ y u2’ en T’, entonces u1 está en el subárbol izquierdo de u2 sii u1’ está en el subárbol izquierdo de u2’, siendo válida la afirmación para los subárboles derechos.
ARBOLES
� Otros conceptos: equivalencia• Se dice que dos árboles binarios, T y T’ son “equivalentes” si son similares y además los nodos correspondientes contienen la misma información.
• Sea info(u) la información contenida en el nodo u . Los árboles son equivalentes sii
Programación II, Universidad Católica del Uruguay 712012
� a) ambos son vacíos
� b) ambos no son vacíos, info(raíz(T)) = info(raíz(T’)) y los subárboles izquierdo y derecho son respectivamente equivalentes.
ARBOLES
A
D
B
C
A
C
B
D
Programación II, Universidad Católica del Uruguay 722012
DCC D
W
Z
X
Y
A
D
B
C
1 2
34
ARBOLES, EQUIVALENCIA
Teorema: Sean los nodos de los árboles binarios T y T’u1,u2,...,un y u1’,u2’,....,un’’
en preorden . Para todo nodo u, seal(u) = 1 si u tiene un subárbol izquierdo no vacíol(u) = 0 en caso contrario
Programación II, Universidad Católica del Uruguay 732012
r(u) = 1 si u tiene un subárbol derecho no vacíor(u) = 0 en caso contrario
Entonces T y T’ son similares si y sólo si n = n’ yl(uj) = l(uj’)r(uj) = r(uj’) para 1 <= j <= n
T y T’ son equivalentes si y sólo si, además,info(uj) = info(uj’) para 1 <= j <= n
ARBOLES B (MULTICAMINO)
� Son usados en general como estructuras de búsqueda a gran escala.
� El almacenamiento de la información se realiza en memoria secundaria.
� Los nodos son “páginas” y los punteros
Programación II, Universidad Católica del Uruguay 742012
� Los nodos son “páginas” y los punteros a los hijos son direcciones de disco a otras páginas.
� Cada nodo contiene varias claves (elementos) y tiene varios hijos.
ARBOLES B (MULTICAMINO)
� Definición: Se dice que un árbol B es de orden n, si:• 1.- Cada página contiene a lo sumo 2n claves (elementos).
• 2.- Cada página, excepto la raíz, contiene n
Programación II, Universidad Católica del Uruguay 752012
• 2.- Cada página, excepto la raíz, contiene nelementos como mínimo.
• 3.- Las páginas que no son hojas, tienen m+1
descendientes, siendo m el número de claves de la página.
• 4.- Todas las páginas de hoja aparecen en el mismo nivel.
� Representación de una página (nodo):
ARBOLES B (MULTICAMINO)
Programación II, Universidad Católica del Uruguay 762012
p0 k1 p1 k2 p2 . . . . . . pm-1 km pm
ARBOLES B (MULTICAMINO)
� El criterio de búsqueda de una clave x en el árbol es cargar la primer página y buscar a x en ella. Si la búsqueda fracasa, se dará una de las siguientes situaciones:
Programación II, Universidad Católica del Uruguay 772012
situaciones:� 1.- ki < x < ki+1 , con 1 =< i < m , hay que continuar la búsqueda en la página apuntada por pi .
� 2.- km < x , hay que continuar la búsqueda en la página apuntada por pm.
� 3.- x < k1 , hay que continuar la búsqueda en la página apuntada por p0 .
ARBOLES B (MULTICAMINO)
� El criterio de inserción:
1. Si el número de elementos en la página es m < 2n , se inserta directamente.
2. Si la página ya está llena, las 2n+1
claves resultantes se dividen en dos
Programación II, Universidad Católica del Uruguay 782012
claves resultantes se dividen en dos páginas, pasando la clave central a la página antecesora.
3. Esto asegura el balance, y hace que los desbordes se propaguen hacia arriba. El árbol B crece de las hojas a la raíz.
Ejercicio Arbol B
� Defina Arbol B, comente sus principales características y describa una estructura de datos para su implementación. Describa (a alto nivel) un algoritmo para insertar un elemento en un árbol B. Dadas las siguientes claves, insértelas en un árbol B de orden 2 (o
Programación II, Universidad Católica del Uruguay 792012
claves, insértelas en un árbol B de orden 2 (o grado 5) mostrando todos los pasos
3,7, 41, 56, 4, 23, 8, 24, 97, 31, 17, 15, 16, 2, 25, 1, 6
y luego proceda a eliminar las siguientes, en el orden indicado (mostrando también todos los pasos)16, 24, 7.
� TElemento
� Clave : Tclave;
� Pagina : PPagina;
� PPagina : referencia (puntero) a TPagina
ARBOL B
Programación II, Universidad Católica del Uruguay 802012
� PPagina : referencia (puntero) a TPagina
�
� TPagina
� P0 : PPagina;
� indice : [0..2*n];
� elementos : array[1..2*n] de TElemento
ARBOLES B - INSERCIÓN
� BuscaInserta (laClave : TClave; p :PPagina ; h: boolean; elem: Telemento);
� COM� SI p = nulo ENTONCES InsertarClave(pone h en true)� SINO� CON p HACER
Programación II, Universidad Católica del Uruguay 812012
� CON p HACER� BuscaClaveEnPágina� SI EncontróClave ENTONCES ProcesarDatos� SINO� BuscaInserta( x, pi, h, u)� SI h ENTONCES� SI m < 2n ENTONCES insertar u en la página y hacer h=false� SINO Dividir página y Subir el elemento de la mitad� FIN
TDA ARBOL B
� TArbolB• Buscar (unaClave: TClave): TPagina //Dada una clave, la operación devuelve la página en la que se encuentra; si la clave no
está en el árbol se devuelve la página nula.• Insertar (unaClave: TClave): boolean // Devuelve verdadero en caso de que la inserción haya sido exitosa, y falso en caso
contrario.• Eliminar (unaClave: TClave): boolean //Devuelve verdadero en caso de que la eliminación haya sido exitosa, y falso en caso
contrario.
� TPagina (básicas)• esHoja(): boolean // Devuelve verdadero en caso de ser hoja, y falso en caso contrario.• esRaiz (): boolean // Devuelve verdadero en caso de ser la raíz, y falso en caso contrario.• estaLlena (): boolean // Devuelve verdadero en caso de no tener lugar para insertar un elemento en la página, y
falso en caso contrario.• subOcupada (): boolean // Devuelve verdadero en caso de tener n-1 elementos, y falso en caso contrario.• buscarEnPágina(unaClave: TClave): TPagina // En caso de que la clave buscada esté en la página devuelve la
propia página, en caso contrario devuelve la página en la cual se debería seguir buscando.
Programación II, Universidad Católica del Uruguay 822012
propia página, en caso contrario devuelve la página en la cual se debería seguir buscando.• InsertarEnPágina (unElemento: TElemento): boolean // Devuelve verdadero si se puede insertar
adecuadamente el elemento en la página, y falso en caso contrario.• eliminarDePagina (unaClave: TClave): TElemento // Elimina y devuelve el elemento cuya clave es UnaClave, y el
elemento nulo en caso que la clave no se encuentre en la página.• crearPágina (): TPagina // Devuelve una página vacía, sin elementos.• distribuirElementos (otraPágina: TPagina): TElemento //Deja la mitad menos uno de los elementos en la página,
la otra mitad en la OtraPágina, y devuelve el elemento con la clave del medio.
(Avanzadas)• buscar (unaClave: TClave): TPagina // busca la clave en el subárbol del cual la página es raíz; si la clave está
devuelva la página en la que se encuentra, y si no está devuelve nulo-• insertar (unaClave: TClave): boolean // Devuelve verdadero en caso de que la inserción haya sido exitosa, y falso
en caso contrario.• eliminar (unaClave: TClave): boolean // Devuelve verdadero en caso de que la eliminación haya sido exitosa, y
falso en caso contrario.� TElemento:
• crearElemento (unaClave: TClave): TElemento• setPaginaHija (unaPagina: TPagina): boolean• setClave (unaPagina: TPagina): boolean
OPERACIONES TDA ARBOL B
//Buscar una clave en el árbol� TArbolB.buscar (unaClave: TClave): TPagina
COMSi Raíz <> nulo entonces
Devolver Raiz.Buscar (unaClave)Sino
Devolver nuloFin siFIN
Programación II, Universidad Católica del Uruguay 832012
� TPagina.buscar (unaClave: TClave): TPagina
COMpaginaSiguiente � buscarEnPagina(UnaClave)Si paginaSiguiente = THIS entonces
Devolver THIS // en esta página encontramos la claveSino
Si paginaSiguiente = NULO entoncesDevolver nulo // la clave no está en el árbol
Sino Devolver paginaSiguiente.buscar(unaClave) // seguimos buscandoFinsi
Fin siFIN
OPERACIONES TDA ARBOL B
//Insertar una clave en el árbolTArbolB. insertar (unaClave: TClave): booleanCOMSi Raíz <> nulo entonces
Si Raiz.Insertar (unaClave) = nulo entoncesDevolver verdadero
Sino Devolver falsoFin si
SinoDevolver falso
Fin siFIN
TPagina. Insertar (Tipo clave UnaClave): TElementoCOM
unelemento � crearElemento(“ ”)paginaSiguiente � buscarEnPágina(unaClave)Si paginaSiguiente = THIS entonces
Devolver falso // ¡esta clave ya existe!Sino
Si paginaSiguiente = nulo entonces // hay que insertar en la actualunElemento.SetClave(unaClave)Devolver verificaEInserta(unElemento)
Sino // seguimos buscando
Programación II, Universidad Católica del Uruguay 842012
Sino // seguimos buscandounElemento � PáginaSiguiente.Insertar(UnaClave)
Si unElemento <> nulo entonces Devolver verificaEInserta(UnElemento)Sino Devolver nulo
Fin siFinsi
Fin siFIN
OPERACIONES TDA ARBOL B
verificaEInserta (unElemento : TElemento) : TElementoCOMSi (no(EstáLlena)) entoncesSi InsertarEnPágina(UnElemento) entoncesDevolver nuloSino Devolver(UnElemento)Fin si
Sino // estaba llenaTipo página OtraPágina � CrearPágina()OtraPágina.InsertarEnPágina(UnElemento)
Programación II, Universidad Católica del Uruguay 852012
OtraPágina.InsertarEnPágina(UnElemento)UnElemento � DistribuirElementos(OtraPágina)UnElemento.SetPáginaHija(OtraPágina)Si (no(EsRaíz)) entonces
Devolver UnElementoSino //¡estamos en la raíz!Tipo página NuevaRaíz � CrearPágina()NuevaRaíz.InsertarEnPágina(UnElemento)NuevaRaiz.SetHijaMenor(Raíz)Raíz � NuevaRaízDevolver nulo
Fin SiFin si
FIN
ARBOLES B, ELIMINACION
� Dos circunstancias diferentes:• El elemento a suprimir se halla en una página de hoja; entonces el algoritmo para su eliminación es fácil y sencillo.
• El elemento no se encuentra en una página de
Programación II, Universidad Católica del Uruguay 862012
• El elemento no se encuentra en una página de hoja; hay que sustituirlo por uno de los dos elementos lexicográficamente contiguos, que resultan estar en las páginas de hoja. En este caso, se debe escoger un criterio de selección del candidato a sustituto: el más a la derecha del subárbol izquierdo, o el más a la izquierda del subárbol derecho.
ARBOLES B, ELIMINACION
� El elemento no está en una página de hoja:• Bajar por el apuntador izquierdo del elemento a eliminar.
• Hasta llegar a la página de hoja, bajar por los apuntadores de la extrema derecha. Sea P la página de hoja a la que se llega.
• Reemplazar el elemento a eliminar por el del extremo
Programación II, Universidad Católica del Uruguay 872012
• Reemplazar el elemento a eliminar por el del extremo derecho de P y reducir el tamaño de P en uno.
• La disminución del tamaño de P debe acompañarse de la verificación del tamaño con el que queda la página.
• Si el número de elementos resultante es menor que la cantidad mínima autorizada (m < n ) , se produce Sub-ocupación.
ARBOLES B, ELIMINACION
� Administración de la sub-ocupación• El único recurso consiste en tomar o anexar un elemento a
partir de una de las páginas vecinas, digamos Q.
• A la estrategia de distribuir de manera uniforme los elementos en las páginas vecinas P y Q se le llama “Balanceo de Páginas” .
Programación II, Universidad Católica del Uruguay 882012
“Balanceo de Páginas” .
• Si Q ya tenía su tamaño mínimo, debe combinarse los elementos de ambas páginas en una sola. A esta estrategia se le llama “Mezcla de Páginas”.
• El proceso de mezcla obliga a insertar la clave del medio en la página madre de P y Q y posteriormente prescindir completamente de la página Q.
ARBOLES B, ELIMINACION
10 20
5 7 8 22 24 42 45 46
30 40
13 15 18 32 35 38
25
26 27
Programación II, Universidad Católica del Uruguay 892012
� Eliminar las siguientes claves:• 25, 45, 24• 38, 32• 8, 27, 46, 13, 42• 5, 22, 18, 26• 7, 35, 15
ARBOLES B, ELIMINACION
10 22 30 40
26 27 13 15 18 205 7 8 32 35 38 42 46
10 22 30
a)
Programación II, Universidad Católica del Uruguay 902012
10 22 30
13 15 18 205 7 8 26 27 35 40 42 46
10 22
15 18 205 7 26 30 35 40
15
7 10 20 30 35 40
10 20 30 40 b)
c) d)
e)
ARBOLES B BINARIOS
� Son los árboles B de orden 1.
� Por lo tanto cada nodo contiene entre uno y dos elementos, y es antecesor de entre dos y tres hijos.
� También se les da el nombre de árbol 2-
Programación II, Universidad Católica del Uruguay 912012
� También se les da el nombre de árbol 2-3.
� No son adecuados para el trabajo en memoria secundaria, sino que se usan para memoria primaria.
� Por ello se ha ideado una forma de representación que ahorra memoria.
ARBOLES B BINARIOS
� Representación de nodos de árbol B binarios
A
Programación II, Universidad Católica del Uruguay 922012
ab
ab c
A
Ba
b c
A B
a b c
ARBOLES B BINARIOS
� TNodo� clave : TClave;
Datos : TDatos;
Programación II, Universidad Católica del Uruguay 932012
Datos : TDatos;� izquierdo, derecho :TNodo;� Horizontal : boolean;�
ARBOLES B BINARIOS
� Inserción : cuatro posibles situaciones que se presentan por el crecimiento de los subarboles de la derecha o de la izquierda
� El caso más sencillo se da cuando crece el subárbol de la derecha de un nodo A y cuando A es la única clave en su página
Programación II, Universidad Católica del Uruguay 942012
A
Ba
b c
A B
a b c
ARBOLES B BINARIOS
A
Ca b
B A
a b
B C
c d
Programación II, Universidad Católica del Uruguay 952012
c d B
b
C
d
A
ca
Inserción del nodo C cuando A ya está llena, se Crea página y balance
� Inserción del nodo A :el subárbol de la izquierda de un nodo B ha aumentado de altura, haciendo que una clave suba
ARBOLES B BINARIOS
B BA A B
Programación II, Universidad Católica del Uruguay 962012
� B no tiene referencias horizontales a la izquierda, rotación
A c
ba
cba a b c
ARBOLES B BINARIOS
c
C
A d
B A
a b
B C
c d
Programación II, Universidad Católica del Uruguay 972012
cA d
ba B
b
C
d
A
ca
Inserción del nodo A,sobreocupación
ARBOLES B BINARIOS SIMETRICOS
� Son los que cumplen con las siguientes propiedades:• Todo nodo contiene una clave y, como máximo, dos
subárboles.
• Todo puntero puede ser horizontal o vertical. No existen dos punteros consecutivos horizontales en ninguna
Programación II, Universidad Católica del Uruguay 982012
dos punteros consecutivos horizontales en ninguna trayectoria de búsqueda (hay indicadores de horizontalidad para ambos punteros)
• Todos los nodos terminales aparecen en el mismo nivel.
• La longitud de la trayectoria de búsqueda es siempre menor a 2 log(N).
• Ejercicio Wirth 4.85
ARBOLES B BINARIOS SIMETRICOS
C
A
B CA B B
CA
Inserción izquierda izquierda
Programación II, Universidad Católica del Uruguay 992012
C
B
A
B
CA
Inserción izquierda izquierda
CA B
Inserción izquierda derecha
ARBOLES B BINARIOS SIMETRICOS
A
C
B CA B B
CA
Programación II, Universidad Católica del Uruguay 1002012
A
B
C
B
CA
Inserción derecha derecha
Inserción derecha izquierda
A CB
ARBOLES B BINARIOS SIMETRICOSEjercicios
� ¿qué largo puede tener la trayectoria más larga de búsqueda en un árbol BBS ?.
� Realizar las siguientes inserciones en árbol BBS:
Programación II, Universidad Católica del Uruguay 1012012
BBS:
� 1) 1 2; 3; 4 5 6; 7;
� 2) 5 4; 3; 1 2 7 6;
� 3) 6 2; 4; 1 7 3 5;
� 4) 4 2 6; 1 7; 3 5;
Recorridos de los árboles genéricos
� Un recorrido visita los nodos del árbol de una forma sistemática
� Los recorridos u ordenamientos se definen recursivamente como sigue:• Si un árbol A es nulo, entonces el listado de los nodos de A en
preorden, inorden o postorden, es la lista vacía.
Programación II, Universidad Católica del Uruguay 1022012
preorden, inorden o postorden, es la lista vacía.
• Si A contiene un sólo nodo, entonces ese nodo constituye el listado en los tres órdenes.
A1 A2 Ak
n
...
Recorridos de Arboles genéricos
� Preorden : Raíz de A, seguido de los nodos de A1 en preorden, luego los de A2 en preorden, etc.
� Inorden : Nodos de A1 en inorden, luego la raíz, luego los nodos de los restantes
Programación II, Universidad Católica del Uruguay 1032012
raíz, luego los nodos de los restantes subárboles en inorden.
� Postorden: Nodos de A1 en postorden, luego los de A2 en postorden, hasta el final, y luego la raíz.
Recorrida en Preorden
� En un recorrido en preorden, un nodo es visitado antes que sus descendientes
� Aplicación: imprimir un documento estructurado
Algoritmo preOrden(v)visitar(v)Para cada hijo w de v
preorden(w)
Programación II, Universidad Católica del Uruguay 1042012
documento estructurado
Informe TDAArbol
1. Introducción Casos2. Métodos
2.1 Insertar 2.2 Buscar1.1 General 1.2 Aplicación 2.3 Eliminar
1
2
3
5
46 7 8
9
Recorrida en Postorden
� En un recorrido en postorden, un nodo es visitado después de sus descendentes
� Aplicación: calcular el espacio usado por archivos en un directorio y sus subdirectorios
Algoritmo postOrden(v)Para cada hijo w of v
postOrden(w)visitar(v)
Programación II, Universidad Católica del Uruguay 1052012
subdirectorios
p2/
trabajos/todo.txt
1Kprogramas/
DDR.java10K
Stocks.java25K
h1c.doc3K
h1nc.doc2K
Robot.java20K
9
3
1
7
2 4 5 6
8
Recorrer el siguiente árbol en preorden y postorden
Programación II, Universidad Católica del Uruguay 1062012
Representación de árboles genéricosPrimer hijo – siguiente hermano
Programación II, Universidad Católica del Uruguay 1072012
Recorridas de árboles genéricos - preorden
TArbolGenerico.preOrden;
COM
SI Raiz <> nulo
Raiz.preOrden;
FINSI
FIN
TNodoArbolGenerico.preOrden;
Programación II, Universidad Católica del Uruguay 1082012
TNodoArbolGenerico.preOrden;
COM
Imprimir(etiqueta);
unHijo � PrimerHijo;
MIENTRAS unHijo <> nulo hacer
unHijo.preOrden;
unHijo � unHijo.HermanoDerecho;
FIN MIENTRAS
FIN
Recorridas de árboles genéricos - postorden
TArbolGenerico.postOrden;
COM
SI Raiz <> nulo
Raiz.postOrden;
FINSI
FIN
Programación II, Universidad Católica del Uruguay 1092012
TNodoArbolGenerico.postOrden;
COM
unHijo � PrimerHijo;
MIENTRAS unHijo <> nulo hacer
unHijo.preOrden;
unHijo � unHijo.HermanoDerecho;
FIN MIENTRAS
Imprimir(etiqueta);
FIN
� Representación de árboles por lista de padres.
REPRESENTACION DE ARBOLES
1
320 335552211
10987654321
A
Programación II, Universidad Católica del Uruguay 1102012
4
6
5
7 8
9 10TDA Tnodo integer;TDA TArbolA = array [1..MaxNodos] de Tnodo;funcion HermanoDerecho(unNodo): Tnodo;i, padre : Tnodo;COMpadre = A[n];PARA i DE n + 1 A MaxNodos HACER
(* busca un nodo después del n que tenga el mismo padre *)SI A[i] = padre DEVOLVER i ;
DEVOLVER 0 ; (* devuelve el nodo nulo si no encontró hermano derecho *)FIN ;
REPRESENTACION DE ARBOLES
� Representación de árboles por arreglo con lista de hijos.
a - b(c/d + e/f)
A : array[1..11] de op: caracter;izq, der: entero;
end
a
-
Programación II, Universidad Católica del Uruguay 1112012
a
+
*
e f
/
b
c
/
d
1234567891011 f 0
-a*b+
//
cde
20406810000
305079110000
ARBOLES
� Largo de Camino:es el número de ramas o aristas que deben ser recorridas para llegar desde la raíz hasta un cierto nodo. La raíz tiene largo de camino 1, sus descendientes directos tienen largo 2, etc..
� Largo de Camino del árbol: Se define como la suma de los largos de camino de todos sus componentes.
Programación II, Universidad Católica del Uruguay 1122012
los largos de camino de todos sus componentes. También se le llama “largo de camino interno”. El largo de camino medio es:
Pn
n iI ii
= •∑1
ARBOLES – LARGO DE CAMINO EXTERNO
A
B C
Programación II, Universidad Católica del Uruguay 1132012
D
J
HGFE
MOLKI PN
ARBOLES – NODOS ESPECIALES
A
B C
Programación II, Universidad Católica del Uruguay 1142012
D
J
HGFE
MOLKI PN
� Largo de camino externo: suma de los largos de camino de los nodos especiales. Si el número de nodos especiales en el nivel i es mi entonces el largo de camino externo promedio es:
ARBOLES
Pm
m iE ii
= •∑1
Programación II, Universidad Católica del Uruguay 1152012
� El máximo número de nodos del árbol será:
N h d d d ddh i
i
h( ) ...= + + + + =−
=
−∑1 2 1
0
1
m i