tema8

24
Unidad IV Tema 8: Arboles Binarios Profesor: Jorge Escalona / Tobías Bolívar Email: [email protected] / [email protected] Página Web: http://estructuradatos.tripod.com

Upload: pedro-sanchez

Post on 21-Jul-2015

139 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Tema8

Unidad IV

Tema 8: Arboles Binarios

Profesor: Jorge Escalona / Tobías Bolívar

Email: [email protected] / [email protected]

Página Web: http://estructuradatos.tripod.com

Page 2: Tema8

Arboles - Definición

Un grafo conectado, aciclico, no dirigido T = (V, E).

| E | = | V | - 1

Mínimamente conectado --- T es desconectado si cualquier arista es removida.

Máximamente acíclico --- T contiene un ciclo si culquier arista es incluida.

Page 3: Tema8

Arboles - Introducción

Estructuras de datos altamente eficientes:

• Inserciones y eliminaciones tienen un tiempo de ejecución

menor a una lista Enlazada O(n=) lg n.

• Algoritmos de Búsquedas con tiempos de ejecución igual a un

arreglo ordenado O(n) = lg n.

Page 4: Tema8

Terminología Básica

a

b d

e f

i j

gh

c

k

raiz, ancestro

padre

nodos

hijo hijo

descendiente

Hoja

(sin hijos )

e, i, k, g, h

son hojas

Nodo interno

hermano

Page 5: Tema8

Sub-arbol

a

b d

e f

i j

gh

c

k

raiz

Un nodo y todos

sus descedientes.

Page 6: Tema8

Caminos de un Arbol

a

cb

ef

d

g

j

ih

Camino 1 Camino 2

Camino 1: { a, b, f, j }

Camino 2: { d, i }

Existe un único camino

desde cualquier nodo a sus

descendientes.

Page 7: Tema8

Altura y Profundidad

7

3 10

8

4

12

16 5

211

9

altura = 4 nivel 0

nivel 1

nivel 2

nivel 3

nivel 4

Altura del nodo = 2

Page 8: Tema8

Grado

7

3 10

8

4

12

16 5

211

9

El número de hijos

de un nodo x es

llamado el grado de x.

grado = 3

grado = 1 grado = 0

Page 9: Tema8

Arboles Binarios

Cada nodo tiene como máximo dos hijos.

Hijo izquierdo:el nodo hijo a la izquierda.

Hijo derecho: el nodo hijo a la derecha.

r

a

a) Es vacío

b) T consiste de tres subconjuntos separados:

1) un nodo raiz

2) un subarbol binario izquierdo

3) un subarbol binario derecho

Un conjunto de nodos T es un árbol binario si:

a

d

bc

f

e

Subarbol izquierdoSubarbol derecho

Page 10: Tema8

Arboles binarios llenos y completos

Arbol binario lleno: Arbol binario completo:

Cada nodo es una hoja Todas las hojas tienen la misma

o tiene grado igual a 2. profundidad y todos los nodos

internos tienen grado 2.

7

3

8 12

10

128

103

73

11 2

N° Nodos = 2h+1 -1

Page 11: Tema8

TDA Arbol Binario

a

b

fe

c

a rightleft

left right

left right

right

rightleft

fe

cb

left

g

left right

NULL

g

Page 12: Tema8

Recorrido InOrden

a

bc

inOrden(A)

1.Llamar inOrden(B)

2. Visitar A

3. Llamar inOrden(C)

inOrden(B)

1.Llamar inOrden(null)

2. Visitar B

3. Llamar inOrden(null)

inOrden(C)

1.Llamar inOrden(null)

2. Visitar C

3. Llamar inOrden(null)

inOrden(null)

Retornar

inOrden(null)

Retornar

inOrden(null)

Retornar

inOrden(null)

Retornar

Page 13: Tema8

Recorrido PreOrden

a

bc

preOrden(A)

1. Visitar A

2.Llamar preOrden(B)

3.Llamar preOrden(C)

preOrden(B)

1. Visitar B

2.Llamar preOrden(null)

3.Llamar preOrden(null)

preOrden(C)

1. Visitar C

2.Llamar preOrden(null)

3.Llamar preOrden(null)

preOrden(null)

Retornar

preOrden(null)

Retornar

preOrden(null)

Retornar

preOrden(null)

Retornar

Page 14: Tema8

Recorrido PostOrden

a

bc

postOrden(A)

1.Llamar postOrden(B)2.Llamar postOrden(C)3.Visitar A

postOrden(B)

1.Llamar postOrden(null)2.Llamar postOrden(null)3.Visitar B

preOrden(C)

1.Llamar postOrden(null)2.Llamar postOrden(null)3.Visitar C

postOrden(null)

Retornar

postOrden(null)

Retornar

postOrden(null)

Retornar

postOrden(null)

Retornar

Page 15: Tema8

Arbol binario de búsqueda

15

10

6

20

12

142 8

2518

9

Elementos menores a un

nodo están en la izquierda

Elementos menores a un

nodo están en la izquierdaElementos mayores a un

nodo están a la derecha

Elementos mayores a un

nodo están a la derecha

Page 16: Tema8

ABB: Buscar un elemento

15

10

6

20

12

142 8

2518

9

9 < 15

9 < 10

9 > 6

9 > 9

9 == 9 T(n) = h +1 = O(lg n)T(n) = h +1 = O(lg n)

Page 17: Tema8

ABB: Insertar un elemento

15

10

6 12

15

10

6 12

14null

a) Antes de insercióna) Antes de inserción b) Después de inserciónb) Después de inserción

Page 18: Tema8

ABB: Eliminar un elemento

Casos:

1) El nodo a ser eliminado es una hoja (no tiene hijos)

2) El nodo a ser eliminado tiene un hijo

3) El nodo a ser eliminado tiene dos hijos

Casos:

1) El nodo a ser eliminado es una hoja (no tiene hijos)

2) El nodo a ser eliminado tiene un hijo

3) El nodo a ser eliminado tiene dos hijos

Page 19: Tema8

ABB: Eliminar un elemento

15

10

6 12

null

a) Antes de eliminara) Antes de eliminar

Elemento a elimiar = 12

15

10

6 12Esperando

garbage

collection

b) Después de eliminarb) Después de eliminar

Caso 1: El nodo es una hojaCaso 1: El nodo es una hoja

nodo a ser eliminado

Page 20: Tema8

ABB: Eliminar un elemento

15

10

6 12

a) Antes de eliminara) Antes de eliminar

nodo a ser eliminado

b) Después de eliminarb) Después de eliminar

Caso 2: El nodo tiene un hijoCaso 2: El nodo tiene un hijo

19

14

15

10

6 19

14

Page 21: Tema8

ABB: Eliminar un elemento

15

10

6 14

a) Antes de eliminara) Antes de eliminar

nodo a ser eliminado

b) Después de eliminarb) Después de eliminar

Caso 3: El nodo tiene dos hijosCaso 3: El nodo tiene dos hijos

1912

15

12

6 14?

?

sucesor de 10

19

Page 22: Tema8

ABB: Eliminar un elemento

10

6 20

a) El sucesor es el hijo derecho del nodoa) El sucesor es el hijo derecho del nodo

Encontrar el sucesor de este nodo

b) El sucesor es el descendiente más a la

izquierda del hijo derecho del nodo

b) El sucesor es el descendiente más a la

izquierda del hijo derecho del nodo

Caso 3: Encontrar el sucesorCaso 3: Encontrar el sucesor

30no tiene hijo izquierdo

ir al hijo derecho

sucesor

10

6 20

Encontrar el sucesor de este nodo

30

ir al hijo derecho

12

14no tiene hijo izquierdo

ir al hijo izquierdo

15

18

ir al hijo izquierdo

sucesor

Page 23: Tema8

ABB: Eliminar un elemento

10

6 20

a) Antes de eliminara) Antes de eliminar

Caso 3: Eliminar con el sucesor de hijo derechoCaso 3: Eliminar con el sucesor de hijo derecho

30no existe

nodo a ser eliminado

sucesor

5 padrenodo a eliminar

paso 1

paso 220

6 30

5

paso 1

paso 2

b) Después de eliminarb) Después de eliminar

1) padre.der = sucesor;

2) sucesor.izq = nodoEliminar.izq;

Page 24: Tema8

ABB: Eliminar un elemento

a) Antes de eliminara) Antes de eliminar

Caso 3: Eliminar con el sucesor de hijo más a la izquierda del hijo derechoCaso 3: Eliminar con el sucesor de hijo más a la izquierda del hijo derecho

a) Después de eliminara) Después de eliminar

10

no existe

20

3015

18

6

5 padrenodo a eliminar

paso 3

paso 4 paso 2

paso 1

paso 1

nodo a eliminar

padre del sucesor

sucesor

hijo derecho del sucesor

15

20

3018

6

5

paso 3

paso 4 paso 2

paso 1

1) sucesorPadre.izq = sucesor.der;

2) sucesor.der = nodoEliminar.der;

3) padre.der = sucesor;

4) sucesor.izq = actual.izq;