UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB):...

Preview:

Citation preview

UNIDAD 6: Contenedores No Lineales

(Incluye 2 clases de 2 hs c/u)

Arboles

30/5/2018 1

Apuntes de apoyo para clases teóricas.Para una conceptualización completa de los temas, los alumnos deberán asistir a las clases

teóricas y completar con lectura del material bibliográfico propuesto.

Tiempo de exposición: 2 hs

Bibliografía

2

1) Apuntes de la cátedra – Dr. Tomas N. Hibbard.

3) El arte de programar ordenadores. Clasificación y Búsquedas. Volúmen III – D. E.Knuth – Ed. Reverté – Reimpresión Año 2002 – (SRO: NO). El tema figura como: Árbolesequilibrados (pag. 462).

2) Videos de la cátedra – Dr. Tomas N. Hibbard – (SRO: SI)

30/5/2018

4) Matemática Discreta y Combinatoria. Ralph P. Grimaldi - Addison – Wesley –3ra.Edición – Año 1998 - (SRO: SI)

5) Matemáticas Discretas - Richard Johnsonbaugh - Prentice Hall – 4ta. Edición – Año1997 - (SRO: NO)

6) Elementos de Matemática Discreta - C. L. Liu - Mc Graw Hill – 2dta. Edición – Año1995 - (SRO: NO)

Software visualización árboles (gt.jar tree)

30/5/2018 4

Autores:• Jakub (kuko) Kováč , Comenius Universit, Bratislava, Eslovaquia (antes

Chescolovaquia)• Octubre de 2013 a la fecha : Software Engineer en Facebook Inc., Londres

Otros autores:• Katka Kotrlová• Pavol (paly) Lukča• Viktor (friker) Tomkovič• Tatiana Tóthová

https://people.ksp.sk/~kuko/gnarley-trees/

Campo de Aplicación

30/5/2018 5

➢ Evaluadores de expresiones aritméticas (Ciencias de la computación)

➢ Representaciones de jerarquía entre sus elementos:❑ Organigramas❑ Árboles genealógicos❑ Tabla de contenidos❑ Árboles de decisión con dos opciones, también pueden ser de 3

opciones.❑ Juegos de algún campeonato❑ Representación de expresiones que contienen operandos y

operadores binarios.❑ Etc.

Objetivos de la clase:

30/5/2018

Arboles

Operaciones básicas:

Binarios (AB)

Generales (A)

De búsqueda ordenados (ABB)

Recorridos

Inserción

Búsqueda – Complejidad

Preorden

Inorden

Posorden

Eliminación

Arbol General: Definición I

30/5/2018 7

Sea G = (N, A, P), donde➢ N, es un conjunto de nodos➢ A, es un conjunto de aristas➢ P, es una función de las aristas, tal que cada P(a) = {p, q}

El grafo G es un árbol, si G es conexo y NO contiene ciclos.

a) u v

wx

y

z

Libro

C2C1 C3

S1.1 S1.2 S3.1 S3.2 S3.3

S3.2.1 S3.2.2

LibroC1

S1.1S1.2

C2C3

S3.1S3.2

S3.2.1S3.2.2

S3.3

b)

Ej.: Ya vimos el árbol cubridor, también podemos representar jerarquías, etc.

Arbol General: Definición II

30/5/2018

8

Un ARBOL es un conjunto finito de uno o más nodos, tales que:

• Existe un nodo especial llamado raíz del árbol (V1)

• Los nodos restantes (v2,v3,..,vn) se dividen en m>=0 conjuntos disjuntos denominados T1, T2,....Tm , cada uno de los cuales es a su vez, un árbol. Estos se llaman subárboles de la raíz.

•Un árbol con 0 nodos es el árbol vacío

Arboles Binarios (AB) :Definición

30/5/2018 9

Los árboles binarios son los tipos particulares más importantes de árboles con raíz

• Cada nodo tiene cero, uno o dos hijos.

• Cada nodo de un árbol binario tiene a lo sumo dos hijos.

• Cada hijo se designa como hijo izquierdo o hijo derecho.

A

I D

x

y z

u v

Hijo izquierdo Hijo derecho

Nodo raíz

Arboles Binarios (AB) …

Relaciones de parentesco y conceptos asociados con la teoría de árboles.

30/5/2018 10

A

I D

➢ Raíz: Nodo “x”

➢ Subárbol izquierdo de A: I➢ Subárbol derecho de A: D

➢ Nodo “x” es padre de los nodos “y” y “z”➢ Nodos “y” y “z”, son hijos del nodo “x”

➢ Nodo “x” es ancestro de los nodos “y” y “z”➢ Nodos “y” y “z”, son descendientes del nodo “x”

➢ Nodos hojas o terminales: Son aquellos que notienen hijos o descendientes. Por ejemplo, losnodos “u”, “v” y “z”.

➢ El grado de cada nodo puede ser 1, 2 o 3.

x

y z

u v

Arboles Binarios (AB): Nivel - Altura

30/5/2018 11

A

I

0

1

2

3

Nivel

1

2

3

4

a = Altura = Nivel + 1 ❑ Al nivel 1 pertenecen losnodos con valores 10 y 30, sedice que pertenecen a lamisma generación.

❑ Altura de A es 4. Nos dá unaidea de la cantidad debúsquedas que se debenrealizar para encontrar o noun elemento dado.

❑ Altura de I, es igual a 3.

❑ Altura de (12, (11, Ø, Ø), Ø),es igual a 2.

Nivel de un vértice o nodo, es la longitud de caminosimple a la raíz.La profundidad o altura de un árbol A, es el númeromáximo de nivel que aparece en dicho árbol más 1.

2511

127

10

21

30

15

Arboles Binarios (AB): Operaciones básicas

12

❑ Recorridos de un árbol:

❑ Preorden

❑ Inorden

❑ Posorden

❑ Búsqueda de un elemento.

❑ Inserción de un elemento.

❑ Eliminación de un elemento.

A

2511

127

10

21

30

15

Arboles Binarios (AB): Recorridos

30/5/2018 13

Dado un Arbol Binario de raiz A:

a) preorden:

1° procesar la raíz A

2° recorrer el subárbol izquierdo de A en preorden

3° recorrer el subárbol derecho de A en preorden

preorden(A) = 15,10,7,12,11,30,21,25

A

2511

127

10

21

30

15

Arboles Binarios (AB): Recorridos

30/5/2018 14

Dado un Arbol Binario de raiz A:

b) inorden:

1° recorrer el subárbol izquierdo de A en inorden

2° procesar la raíz A

3° recorrer el subárbol derecho de A en inorden

inorden(A) = 7,10,11,12,15,21,25,30

A

2511

127

10

21

30

15

Arboles Binarios (AB): Recorridos

30/5/2018 15

Dado un Arbol Binario de raiz A:

c) posorden:

1° recorrer el subárbol izquierdo de A en posorden

2° recorrer el subárbol derecho de A en posorden

3° procesar la raíz A

posorden(A) = 7,11,12,10,25,21,30,15

A

2511

127

10

21

30

15

Arboles Binarios de Búsqueda (ABB):

Vamos a ver la primera estructura para facilitar la búsqueda y la inserción.

Definiremos el conjunto de árboles binarios de búsqueda, abreviado ABB, con tresfunciones, “valor”, “izq” y “der”, que entenderemos respectivamente como:

1. valor: valor almacenado en la raíz.2. izq: subárbol izquierdo.3. der: subárbol derecho.

30/5/2018 16

izq

A

A = Ø

der

Hay un objeto en los ABB que no tiene estas funciones definidas, es el árbol nulo (Ø).

valor(A) = xx

Árboles Binarios de Búsqueda (ABB):

Definición:Sea “T” un tipo de datos.

1. Ø es un ABB.2. Si I y D son ABB y t ∈ T entonces A = (t, I, D) es un ABB

con valor(A) = tizq(A) = Ider(A) = D

30/5/2018 17

I

A A = Ø

D

valor(A) = t

izq(A) = I

der(A) = D

1) 2) t

Árboles Binarios de Búsqueda (ABB) …

Ejemplos:

30/5/2018 18

5A valor(A) = 5izq(A) = Ø

der(A) = Ø

A = (5, Ø, Ø)1)

Ø Ø

2A valor(A) = 2izq(A) = Ø

der(A) = (9, Ø, Ø)

A = (2, Ø, (9, Ø, Ø))2)

Ø

Ø

9

Ø

1A valor(A) = 1izq(A) = (4, Ø, Ø)

der(A) = (9, Ø, Ø)

A = (1, (4, Ø, Ø), (9, Ø, Ø))3)

Ø

4

Ø Ø

9

Ø

I D

ID

DI

Árboles Binarios de Búsqueda (ABB) …

El conjunto de valores de un ABB son todos los valores de los subárboles de A.Recursivamente:

➢ Ø no tiene ningún valor➢ t es un valor de A si t = valor(A) o

t es un valor de izq(A) ot es un valor de der(A)

30/5/2018 19

A = (1, (4, Ø, (6, Ø, Ø)), (9, Ø, Ø))Ej.:

DI

1A valor(A) = 1izq(A) = (4, Ø, (6, Ø, Ø))

der(A) = (9, Ø, Ø)

Ø

4

Ø

9

Ø

Ø

6

Ø

Los valores de A son: 1, 4, 6 y 9

Árbol Binario de Búsqueda ordenado

Sea ≤ una relación transitiva y reflexiva sobre T. El AB A es ordenado respecto de ≤ si esØ o si izq(A) y der(A) son ordenados respecto de ≤:

todos los valores de izq(A) ≤ valor(A) ≤ todos los valores de der(A)

30/5/2018 20

A = (15, (10, (7, Ø, Ø), (12, (11, Ø, Ø), Ø) ), (30, (21, Ø, (25, Ø, Ø) ), Ø ) )Ej.:

D = der(A)I = izq(A)A

i. todos los valores izq(A) ≤ 15 ≤ todos los valores de der(A)

ii. todos los valores izq(I) ≤ 10 ≤ todos los valores de der(I)

I

2511

21127

3010

15

VEMOS QUE ESTE TIPO DE ARBOLES, PERMITE ALMACENARINFORMACIÓN ORDENADA.

Búsqueda en un ABB ordenado

30/5/2018 21

Sea T los números naturales. Podemos representar un conjunto de números naturalesmediante un ABB ordenado sobre T, y en su orden natural, y efectuar x ∈ C mediantebuscar(A).

buscar(x, A) =Si (A = Ø) “NO”Sino

Si (x = valor (A)) “SI”Sino

Si (x < valor(A)) buscar(x, izq(A))Sino buscar(x, der(A))

Ej. a) buscar(2, (15, (10, (7, Ø, Ø), (12, (11, Ø, Ø), Ø) ), (30, (21, Ø, (25, Ø, Ø) ), Ø)) )== buscar(2, (10, (7, Ø , Ø ), (12, 11, Ø ))= buscar(2, (7, Ø , Ø))= buscar(2, Ø))= NO

A

2511

127

10

21

30

15

Búsqueda en un ABB ordenado …

30/5/2018 22

buscar(x, A) =Si (A = Ø) “NO”Sino

Si (x = valor (A)) “SI”Sino

Si (x < valor(A)) buscar(x, izq(A))Sino buscar(x, der(A))

Ej. b) buscar(21, (15, (10, (7, Ø, Ø), (12, (11, Ø, Ø), Ø) ), (30, (21, Ø, (25, Ø, Ø) ) , Ø))) =(Animación en qmatica y los alumnos en el pizarrón prueban)

= buscar(21, (30, (21, Ø, (25, Ø, Ø) ) , Ø ) )= buscar(21, (21, Ø, (25, Ø, Ø) ))= SI

A

2511

127

10

21

30

15

Costo de búsqueda en un ABB en el peor caso

30/5/2018 23

La esperanza (el caso promedio) para la búsqueda en un ABB construido al azar es,proporcional al logaritmo en base 2 del número de nodos.

a = k (log2 (n)), k: constante menor que 2. (1,386)a = 1,386 (log2 (n)

Árbol binario degenerado con “n” nodos

A A

Árbol binario completo con “n” nodos (bien equilibrado)

a = n a = log2 (n + 1)

Árbol binariocompleto: Cadavértice interno(verdes) tieneexactamente doshijos y los nodosterminales(negros) ningúnhijo.

A

Gráfica comparativa de los costos de búsqueda en el peor caso

30/5/2018 24

Árbol binario bien equilibrado: a = lg(n + 1)

Árbol binario construido al azar: a = 1.386 lg(n)Árbol binario degenerado: a = n

n

a

Inserción en un ABB ordenado

30/5/2018 25

El objetivo es construir un ABB ordenado y que sirva para la búsqueda. El algoritmo quese presenta a continuación, se inicia con un ABB vacío, y construye un ABB ordenadocuando los objetos vienen en forma aleatoria.

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

El subárbol izquierdo,se reemplaza por loque resulta deinsertar por izquierdade A.

Ej.: supongamos A = Ø y, se desea insertar la sucesión de nros. aleatorios: 82, 35, 24,88, 5, 58, 57, ...

82: insertar(82, A = Ø) = (82, Ø, Ø) A 82Después de insertar

Inserción en un ABB ordenado …

30/5/2018 26

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

35: insertar(35, (82, Ø, Ø)) = A(izq→ insertar(35, izq(A)))

A= A(izq→ insertar(35, Ø))

Ø Ø

= (82, (35, Ø , Ø) , Ø)

I Dder(A)izq(A)

A

Ø Ø

Ø

82

82

35

Después de insertar

= A(izq→ (35, Ø , Ø))

Inserción en un ABB ordenado …

30/5/2018 27

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

24: insertar(24, (82, (35, Ø , Ø) , Ø)) = A(izq→ insertar(24, (35, Ø , Ø))))

A= A(izq→ insertar(24, Ø))

Ø Ø

Ø

= A(izq→ (24, Ø , Ø))

= (82, (35, (24, Ø , Ø) , Ø) , Ø)

A82

35

82

35

24

Después de insertar

Inserción en un ABB ordenado …

30/5/2018 28

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

88: insertar(88, (82, (35, (24, Ø , Ø) , Ø) , Ø)) = A(der→ insertar(88, Ø))

= A(der→ (88, Ø , Ø))

= (82, (35, (24, Ø , Ø) , Ø) , (88, Ø , Ø))A

82

35

24

A82

35

24

88Después de insertar

Inserción en un ABB ordenado …

30/5/2018 29

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

5: insertar(5, (82, (35, (24, Ø , Ø) , Ø) ,(88, Ø ,Ø)) Los alumnos en el pizarrón

A82

35

24

88

Eliminación en un ABB ordenado:

30/5/2018 30

Caso:

1: Borrar un nodo sin hijos o nodo hoja (129) , así que podemos eliminarlo:

Simplemente se borra y se establece a nulo el puntero de su padre.

Eliminación en un ABB ordenado:

30/5/2018 31

Caso:

2: Borrar un nodo con un subárbol hijo (201) (izq o der: vincular el abuelo con su hijo):

Eliminación en un ABB ordenado:

30/5/2018 32

Caso:

3: Borrar un nodo con dos subárboles hijos (534):

Caso III: el nodo 534 tiene dos hijos.

En este caso, encontramos el sucesor de 534: el nodo más a la izquierda (el más pequeño: -) en el subárbol derecho, que lo reemplazará.

El sucesor tiene como máximo un hijo, por lo que podemos eliminarlo fácilmente.

Eliminación en un ABB ordenado:

30/5/2018 33

Caso:

3: Borrar un nodo con dos subárboles hijos (534):

Caso III:El nodo 168 tiene dos hijos.

En este caso, encontramos el sucesor de 168 (el mas pequeño) , el nodo más a la izquierda en el subárbol derecho - que lo reemplazará (el 219).

Arboles: Hasta aquí vimos:

30/5/2018

Arboles

Operaciones básicas:

Binarios (AB)

Generales (A)

De búsqueda ordenados (ABB)

Recorridos

Inserción

Búsqueda – Complejidad

Preorden

Inorden

Posorden

Eliminación

Próxima clase implementaciones de ABB

UNIDAD 6: Contenedores No Lineales

Arboles

(Nivel de implementación)

30/5/2018 35

Apuntes de apoyo para clases teóricas.Para una conceptualización completa de los temas, los alumnos deberán asistir a las clases

teóricas y completar con lectura del material bibliográfico propuesto.

Tiempo de exposición: 2 hs

Arboles Binarios (AB): Implementación

30/5/2018 36

AB

(III) Secuencial: único array

(II) Listas enlazada

(I) Con tipos recursivos de un lenguaje (Haskell)

a.Con asignación estática de memoria (Cursores)

b.Con asignación dinámica de memoria (Punteros)

El principal requerimiento para cualquier representación de un árbol es:- tener acceso directo a la raíz y- dado cualquier nodo del árbol, que se tenga acceso directo a sus hijos.

30/5/2018 37

Arboles binarios (AB):

(I) Implementación con tipos recursivos de un lenguaje

Arboles binarios (AB): (I) Implementación con tipos recursivos

30/5/2018 38

Un tipo Arbol sobre elementos del tipo genérico a puede ser construído de dos formas:

(1) Aplicando un constructor de dato (al que nosotros llamaremos Nodo) a tres parámetros:

- el primer arg. de tipo a (valor de la raíz)

- el segundo arg. de tipo Arbol sobre a (que será el subárbol I)

- el tercero arg. de tipo Arbol sobre a (que será el subárbol D)

(2) Usando un constuctor de dato (al que nosotros llamaremos Vacio) para indicar árbol vacío.

Código Haskell:

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacioderiving Show

30/5/2018 39

Ejemplo I: Arbol constante de caracteres:

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacio deriving Show

arbolChar :: Arbol Char

arbolChar = Nodo ‘A’ (Nodo ‘B’

(Nodo ‘D’ Vacio Vacio)

Vacio)

(Nodo ‘C’

(Nodo ‘G’ Vacio Vacio)

(Nodo ‘H’ Vacio Vacio))

Arboles binarios (AB): (I) Implementación con tipos recursivos

30/5/2018 40

Ejemplo II: Arbol constante cuyos nodos contendrán números enteros

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacio deriving Show

arbolInt :: Arbol Int

arbolInt = Nodo 10 (Nodo 6 Vacio (Nodo 8 Vacio Vacio))

(Nodo 15 Vacio Vacio)

Arboles binarios (AB): (I) Implementación con tipos recursivos

30/5/2018 41

preorden :: Arbol a -> [a]

preorden Vacio = []

preorden (Nodo raiz izq der) =

[raiz] ++ preorden izq ++ preorden der

Programa Haskell: ABBconstante.hs

preorden(arbolInt) = [10,6,8,15]

Arboles binarios (AB): Recorridos(I) Implementación con tipos recursivos

30/5/2018 42

inorden :: Arbol a -> [a]

inorden Vacio = []

inorden (Nodo raiz izq der) =

inorden izq ++[raiz] ++ inorden der

Programa Haskell: ABBConstante.hs

inorden(arbolInt) = [6,8,10,15]

Arboles binarios (AB): Recorridos(I) Implementación con tipos recursivos

30/5/2018 43

posorden :: Arbol a -> [a]

posorden Vacio = []

posorden (Nodo raiz izq der) =

posorden izq ++ posorden der ++ [raiz]

Programa Haskell: ABBconstante.hs

posorden(arbolInt) = [8,6,15,10]

Arboles binarios (AB): Recorridos(I) Implementación con tipos recursivos

30/5/2018 44

ABB: Algoritmo de Inserción(I) Implementación con tipos recursivos

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacio

deriving Show

insertArbol :: Ord a => a -> Arbol a -> Arbol a

insertArbol elemento Vacio = Nodo elemento Vacio Vacio

insertArbol elemento (Nodo raiz izq der)

| elemento < raiz = Nodo raiz (insertArbol elemento izq) der

| elemento > raiz = Nodo raiz izq (insertArbol elemento der)

| elemento == raiz = Nodo raiz izq der

30/5/2018 45

ABB: Algoritmo de construcción de un árbol BB a partir de una lista

Ej:

Programa Haskell: ABB.hs (ABB.pdf)

Entrada: Lista de elementos: [15,8,6,10]

Salida: arbolInt : Nodo 10 (Nodo 6 Vacio (Nodo 8 Vacio Vacio))

(Nodo 15 Vacio Vacio)

deListaaArbol :: Ord a => [a] -> Arbol a

deListaaArbol = foldr insertArbol Vacio

4° en evaluar ( 3° en evaluar ( 2° en evaluar ( 1° en evaluar ) ) )

insertArbol 15 ( insertArbol 8 ( insertArbol 6 (insertArbol 10 Vacio)))

30/5/2018 46

ABB: algoritmo para buscar un elemento

(I) Implementación con tipos recursivos

buscar :: Ord a => a -> Arbol a -> Bool

buscar x Vacio = False

buscar x (Nodo raiz izq der) =

if x == raiz then True

else

if x < raiz then buscar x izq

else buscar x der

Programa Haskell: ABB.hs

>buscar 5 arbolInt (pertenece 5 arbolInt)

False

>buscar 8 arbolInt

True

30/5/2018 47

Arboles binarios (AB):

(II) Implementación con listas enlazadascon asignación estática de memoria

(arrays)

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

30/5/2018 48

El árbol binario usa:- tres arrays paralelos, VALOR, IZQ y DER.

Si un nodo N del árbol se encuentra en la posición K, entonces:- VALOR(K): contiene el dato del nodo N.- IZQ(K): contiene la localización del hijo izquierdo del nodo N.- DER(K): contiene la localización del hijo derecho del nodo N.

- IZQ(0): contiene la localización de la raíz del árbol.

Si el árbol está vacío, entonces IZQ(0) = 0Si el árbol NO está vacío, entonces IZQ(0) 0

DER(0) contiene la localización del primer nodo vacío, y es el inicio de una lista enlazada de nodos disponibles sobre el Array DER

30/5/2018 49

Ejemplo: Diagrama esquemático: RAIZ

A

CB

HD G

0 1 2 3 4 5 6 7 8 9 10 11 12

VALOR A D B G C H

IZQ 1 3 0 2 0 5 0

DER 4 9 0 0 6 0 7 8 10 11 12 0 0

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Estructura de datos en Pascal:

Const M = 100 {cantidad total de memoria reservada}Type

Tipo_elemento = Char; AB = Record

Valor: Array [0..M] of tipo_elemento;Izq : Array [0..M] of Integer;Der: Array [0..M] of Integer;

end;

Var A: AB;

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Carpeta Arboles en Pascal: Programa Pascal: Arbolarr.pasUnit Pascal: ABBarra.pas

Operaciones: Recorrido Preorden

Procedure Preorden(A: AB, Raíz:Integer); Begin

if Raiz <> 0 thenBegin

Write(A.Valor[Raíz], ’ ‘);Preorden(A, A.IZQ[Raíz]);Preorden(A, A.DER[Raiz]);

end;End;

Prueba del algoritmo en el Pizarrón.

0 1 2 3 4 5 6 7 8 9 10 11 12

VALOR A D B G C H

IZQ 1 3 0 2 0 5 0

DER 4 9 0 0 6 0 7 8 10 11 12 0 0

Los recorridos Inorden y Posordense dejan como ejercicio.

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Operaciones: Búsqueda de un elemento:

Function Buscar(t:Tipo_Elemento; A: AB; Raíz:Integer): Boolean; Begin

if Raiz = 0 then Buscar:= Falseelse

if A.Valor[Raíz] = t then Buscar:=Trueelse

if A.Valor[Raíz] > t then Buscar:=Buscar(t, A, A.Izq[Raíz] )else Buscar:=Buscar(t, A, A.Der[Raíz]);

end;

Prueba del algoritmo en el Pizarrón.

0 1 2 3 4 5 6 7 8 9 10 11 12

VALOR 15 8 10 18 20 30

IZQ 1 3 0 2 0 5 0

DER 4 9 0 0 6 0 7 8 10 11 12 0 0

ABB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Operaciones: Inserción de un elemento

Procedure Insertar(t:tipo_elemento; VAR A:AB; Var Raiz:Integer;Var Nuevo:Integer);Var Prox_Nuevo:Integer;Begin

If Raiz = 0 thenbegin {insertar el nuevo nodo}

Nuevo := A.DER[0]; Prox_Nuevo := A.DER[Nuevo];A.VALOR[Nuevo] := t; A.IZQ[Nuevo] := 0; A.DER[Nuevo] := 0;A.DER[0] := Prox_Nuevo;If A.IZQ[0] = 0 then A.IZQ[0] := Nuevo;

endelse

If (t < A.VALOR[Raiz]) then insertar(t,A,A.IZQ[Raiz], A.IZQ[Raiz]);else if (t > A.VALOR[Raiz]) then insertar(t, A, A.DER[Raiz], A.DER[Raiz]);

end;

ABB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

30/5/2018 54

Arboles binarios (AB):

(II) Implementación con listas enlazadascon asignación dinámica de memoria

(punteros)

30/5/2018 55

TypeTipo_Elemento= char; {o el tipo que corresponda}AB = ^Nodo;Nodo = Record

Valor : Tipo_Elemento;Izq: AB;Der: AB;

End;Var A:AB;

Ejemplo: Diagrama esquemático: A:RAIZ

A

CB

HD G

Estructura de datos en Pascal:

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Carpeta Arboles en Pascal: Programa Pascal: ArbolBB.pasUnit Pascal: ABBpunte.pas

Operaciones: Recorrido Preorden

Procedure Preorden(A: AB);begin

if A <> nil thenbegin

Writel(A^.Valor);Preorden(A^.Izq);Preorden(A^.Der);

end ;end;

Prueba del algoritmo en el Pizarrón.

Los recorridos Inorden y Posordense dejan como ejercicio.

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Operaciones: Búsqueda de un elemento en un ABB ordenado

Function Buscar(t:Tipo_Elemento; A: AB): Boolean; Begin

if A = Nil then Buscar:= Falseelse

if A^.Valor = t then Buscar:=Trueelse

if A^.Valor > t then Buscar:=Buscar(t, A^.Izq)else Buscar:= Buscar(t, A^.Der);

end;

Prueba del algoritmo en el Pizarrón.

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Operaciones: Inserción de un elemento en un ABB ordenado

Procedure Insertar(t:Tipo_Elemento; VAR A: AB);Var Nuevo:AB;Begin

If A = Nil thenbegin {insertar el nuevo nodo}

New(Nuevo);Nuevo^.Valor:= t; Nuevo^.IZQ := Nil; Nuevo^.DER:=Nil;A:= Nuevo;

endelse

If (t < A^.VALOR) then Insertar(t, A^.IZQ)else if (t > A^.VALOR) then insertar(t, A^.DER);

end;

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Prueba del algoritmo en el Pizarrón.

Implementación Enlazada con Asignación Dinámica de Memoria (Punteros) Eliminación en un ABB ordenado: Prueba en el pizarrón

Procedure eliminar(A:AB; t: Tipo_Elemento);Var aux: AB;Begin

if (A <> Nil) thenbegin

if A^.Valor < t then eliminar(A^.Der, t)else if A^.Valor > t then eliminar (A^.Izq, t)

else if A^.Valor = t)thenbegin

aux := A;if A^.Izq = nil then A := A^.Derelse if A^.Der = Nil then A := A^.Izq

else reemplazar(A^.Izq, aux);dispose(aux);

End;End;

End;

Procedure reemplazar(A: AB, aux: AB);Begin

if A^.Der = Nil then begin aux^.Valor := A^.Valor; aux := A; A := A^.Izq Endelse reemplazar(A^.Der, aux)

End;

30/5/2018 60

Arboles binarios (AB):

(III) Implementación secuencial con un array

Utiliza únicamente un array al que llamaremos ARBOL, de la siguiente manera:

a) La raíz del árbol se guarda en ARBOL[1].

b) Si un nodo N está en ARBOL[K], entonces:

• Su hijo izquierdo está en ARBOL[2*K]

• Su hijo derecho está en ARBOL[2*K + 1]

c) Se usa 0 o un valor nulo para indicar subárbol vacío.

Ejemplo:

ARBOL

1 A

2 B

3 C

4 D

5 Nulo

6 G

7 H

8 Nulo

9 Nulo

10 Nulo

11 Nulo

12 Nulo

13 Nulo

14 Nulo

ABB: (III) Implementación Secuencial (Array)

Definición de la Estructura de Datos y operaciones:

ABB: (III) Implementación Secuencial (Array)

Const = 100; {cantidad de memoria reservada para el arbol}Type

Tipo_Elemento= char; {o el tipo que corresponda}AB = Array[1..M] of Tipo_Elemento;

Var Arbol: AB;

Operaciones:

1) Recorrido Preorden2) Recorrido Inorden3) Recorrido Posorden4) Buscar (t, Arbol)5) Insertar(t, Arbol)6) Eliminar(t, Arbol)

Se dejan como ejercicio

Resumiendo, la implementación de Arboles Binarios la realizamos con:

30/5/2018 63

AB

(III) Secuencial (1 array)

(II) Enlazada

(I) Con tipos recursivos de un lenguaje (Haskell)

a.Con asignación estática de memoria (Array)

b.Con asignación dinámica de memoria (Punteros)

Arboles: (próximas clases)

30/5/2018 64

A 2-3

AVL Otros tipos de árboles

etc

Sus operaciones

búsqueda

Inserción

Recommended