arboles03

13
Árboles binarios Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile [email protected] Actualización: 13 de mayo de 2005 Franco Guidi Polanco 2 Árbol: definición Árbol (del latín arbor –oris): Planta perenne, de tronco leñoso y elevado, que se ramifica a cierta altura del suelo. (otras, ver Real Academia Española…) Franco Guidi Polanco 3 Árbol: definición (cont.) Árbol: Grafo conexo, no orientado y acíclico. A B C D E H Franco Guidi Polanco 4 Árbol: definición (cont.) Árbol: Una estructura de datos accesada desde un nodo raíz. Cada nodo es ya sea una hoja o un nodo interno. Un nodo interno tiene uno o más nodos hijos, y se le llama padre de sus nodos hijos. Un árbol es, ya sea: un conjunto vacío, o una raíz con cero o más árboles

Upload: pedro-hugo-valencia-morales

Post on 03-Jul-2015

2.636 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Arboles03

Árboles binarios

Franco Guidi PolancoEscuela de Ingeniería Industrial

Pontificia Universidad Católica de Valparaíso, [email protected]

Actualización: 13 de mayo de 2005

Franco Guidi Polanco 2

Árbol: definición

Árbol (del latín arbor –oris):Planta perenne, de tronco leñoso y elevado, que se ramifica a cierta altura del suelo. (otras, ver Real Academia Española…)

Franco Guidi Polanco 3

Árbol: definición (cont.)

Árbol:Grafo conexo, no orientado y acíclico.

A

B

C

D

E

H

Franco Guidi Polanco 4

Árbol: definición (cont.)

Árbol:Una estructura de datos accesada desde un nodo raíz. Cada nodo es ya sea una hoja o un nodo interno. Un nodo interno tiene uno o más nodos hijos, y se le llama padre de sus nodos hijos.

Un árbol es, ya sea:• un conjunto vacío, o• una raíz con cero

o más árboles

Page 2: Arboles03

Franco Guidi Polanco 5

Hojas y nodos internos

Una hoja es cualquier nodo que tiene sus hijos vacíos.Un nodo interno es cualquier nodo con al menos un hijo no vacío.

Hojas

a

b c

f

g h

ed

Nodos internos

Franco Guidi Polanco 6

subárbol

subárbol

Representación de un árbol

raíza

b c

if g h

d e

ksubárbol

subárbol

j

l m

Franco Guidi Polanco 7

Representación de un árbol (cont.)

a

b c

f

d e

g h

subárboles denodo b

j

l m

i k

subárboles denodo c

subárbol de nodo e

Franco Guidi Polanco 8

Nodos padres e hijos

Las raíces de los subárboles de un árbol son hijosde la raíz del árbol.Existe un arco desde cada nodo a cada uno de sus hijos, y se dice que este nodo es padre de sus hijos.

Page 3: Arboles03

Franco Guidi Polanco 9

n1

n2

n3

Ruta y largo de una ruta

Si n1, n2,... nk es una secuencia de nodos en un árbol, de modo que ni es padre de ni + 1, para 1<=i<=k, entonces esta secuencia se llama rutadesde n1 a nk. El largo de esta ruta es k.

a

b c

f

g h

ed

Franco Guidi Polanco 10

Ancestros y descendientes

Si existe una ruta desde un nodo A a un nodo B, entonces A es ancestro de B y B es descendiente de A.Luego, todos los nodos de un árbol son descendientes de la raíz del árbol, mientras que la raíz es el ancestro de todos los nodos.

Franco Guidi Polanco 11

Altura

La altura de un nodo M de un árbol corresponde al número de nodos en la ruta desde la raíz hasta M.La altura de un árbol corresponde a la altura del nodo más profundo.

Altura del nodo=2

Altura del árbol=4

a

b c

f

g h

ed

Franco Guidi Polanco 12

Niveles

Todos los nodos de altura d están en el nivel d en el árbol.La raíz está en el nivel 1, y su altura es 1.

Nivel 1

Nivel 2

Nivel 3

Nivel 4

a

b c

f

g h

ed

Page 4: Arboles03

Franco Guidi Polanco 13

Árboles binarios

Un A.B. está constituido por un conjunto finito de elementos llamados nodos.

Un árbol binario:no tiene nodos (está vacío); otiene un nodo llamado raíz, junto con otros dos árboles binarios llamados subárboles derecho e izquierdode la raíz.

Nota: Una parte importante del material presentado en esta sección fue elaborado por Marcelo Silva F.

Franco Guidi Polanco 14

subárbol izquierdosubárbol derecho

Representación de un árbol binario (I)

raíz

a

b c

f

g h

ed

Franco Guidi Polanco 15

subárbol izquierdo

subárbol derecho

Representación de un árbol binario (II)

raíz

a

b c

f

g h

ed

Franco Guidi Polanco 16

Igualdad de árboles binarios

Para ser iguales, dos árboles deben tener tanto la misma estructura, como el mismo contenido.

a

b

a

b≠

Page 5: Arboles03

Franco Guidi Polanco 17

Árboles binarios llenos

Un árbol binario lleno es aquel en que cada nodo es un nodo interno con dos hijos no vacíos, o una hoja.

a

b c

f

g h

ed

No es A.B. lleno

a

b c

f

g h

e

Es A.B. lleno

Franco Guidi Polanco 18

Árboles binarios completos

Un árbol binario completo tiene una forma restringida, que se obtiene al ser llenado de izquierda a derecha. En un A.B. Completo de altura d, todos los niveles, excepto posiblemente el nivel d están completamente llenos.

a

b c

fedpero no es un A.B. llenoEs un A.B. completo

Franco Guidi Polanco 19

Número de nodos en un árbol binario

El máximo número de nodos en el nivel i de un árbol binario es 2(i-1).El máximo número de nodos en un árbol binario de altura K es 2(K)-1.

Franco Guidi Polanco 20

Representación de árboles binarios mediante nodos y referencias

a

b c

e

f

d

Page 6: Arboles03

Franco Guidi Polanco 21

Diagrama de clases de un árbol binario

Diagrama de clases árbol binario de enteros:

ABB

insert(i:int)find(d:Data):booleandelete(i:int)

ABBNode

data:int

setData(i:int) getData():intsetLeft(n:ABBNode)getLeft():ABBNodesetRight(n:ABBNode)getRight():ABBNodeisLeaf():boolean

left right

1..1

root

Franco Guidi Polanco 22

Diagrama de objetos de un árbol binario

:ABB

root:ABBNode

data:20

:ABBNode

data:7

:ABBNode

data:2

:ABBNode

data:32

:ABBNode

data:40

:ABBNode

data:15

Franco Guidi Polanco 23

Representación de árboles binarios mediante arreglos

Si la raíz de un subárbol se almacena en A[i], su hijo izquierdo se almacena en A[2*i], y su hijo derecho en A[2*i+1].

a

b c

f

g h

ed

e f g ha b c d1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Franco Guidi Polanco 24

Recorrido de árboles binarios

Un recorrido es cualquier proceso destinado a visitar los nodos de un árbol binario en un determinado orden.Cualquier recorrido que visite cada nodo exactamente una vez, se denomina una enumeración de los nodos del árbol.Recorridos de enumeración a analizar:

PreordenInordenPostorden

Page 7: Arboles03

Franco Guidi Polanco 25

Recorrido en Preorden

Dado un árbol binario:

1) Visitar su raíz.2) Recorrer en preorden su subárbol izquierdo.3) Recorrer en preorden su subárbol derecho.

1

2 3

Franco Guidi Polanco 26

Código para recorrido Preorden

void preorder(BinNode rt) // rt es la raíz del subarbol{if (rt==null)

return; // subarbol vacíovisit(rt) // hace algo con el nodopreorder(rt.left());preorder(rt.right());

}

Franco Guidi Polanco 27

Ejemplo de recorrido en Preorden

a

b c

f

g h

ed

i

j k

a b d c e f g i j k h

1

2 3

Franco Guidi Polanco 28

Recorrido en Inorden

Dado un árbol binario:

1) Recorrer en inorden su subárbol izquierdo.2) Visitar su raíz.3) Recorrer en inorden su subárbol derecho.

2

1 3

Page 8: Arboles03

Franco Guidi Polanco 29

Código para recorrido Inorden

void inorder(BinNode rt) // rt es la raíz del subarbol{if (rt==null)

return; // subarbol vacío inorder(rt.left());visit(rt) // hace algo con el nodoinorder(rt.right());

}

Franco Guidi Polanco 30

Ejemplo de recorrido en Inorden

a

b c

f

g h

ed

i

j k

d b a e c g j i k f h

2

1 3

Franco Guidi Polanco 31

Recorrido en Postorden

Dado un árbol binario:

1) Recorrer en postorden su subárbol izquierdo.2) Recorrer en postorden su subárbol derecho.3) Visitar su raíz.

3

1 2

Franco Guidi Polanco 32

Código para recorrido Postorden

void postorder(BinNode rt) // rt es la raíz del subarbol{if (rt==null)

return; // subarbol vacíopostorder(rt.left());postorder(rt.right());visit(rt) // hace algo con el nodo

}

Page 9: Arboles03

Franco Guidi Polanco 33

Ejemplo de recorrido en Postorden

a

b c

f

g h

ed

i

j k

d b e j k i g h f c a

3

1 2

Franco Guidi Polanco 34

Árbol binario de búsqueda

Supongamos que tenemos un conjunto de nelementos que pueden ser ordenados por alguna clave.En un árbol binario de búsqueda (ABB), todos los nodos almacenados en el subárbol izquierdo de un nodo cuyo valor clave es C tienen claves menores que C, mientras que todos los nodos ubicados en el subárbol derecho tienen claves mayores que C.

Franco Guidi Polanco 35

Ejemplos de árboles binarios de búsqueda

c

<c >c

a

b c

fedNo es ABB

c

b e

fdaEs ABB

Definición de ABB

Franco Guidi Polanco 36

Ingreso de elementos a un ABB

10

5 15

18147

12

{ 10, 5, 7, 15, 14, 12, 18 } { 15, 18, 14, 5, 10, 12, 7 }

15

14 18

5

127

10

Page 10: Arboles03

Franco Guidi Polanco 37

ABB de referencia

ABB

insert(e:Element)find(key:int):Elementdelete(i:int):Element ABBNode

setData(e:Element) getData():ElementsetLeft(n:ABBNode)getLeft():ABBNodesetRight(n:ABBNode)getRight():ABBNodeisLeaf():boolean

left right

1root

Element{interface}

getKey():intdata

1

Franco Guidi Polanco 38

Ingreso de elementos a un ABB (cont.)

private BinNode insert (BinNode rt, Element val) {if (rt == null)

return new BinNode(val);Element it = (Element)rt.element();if (it.key() > val.key())rt.setLeft(insert(rt.left(), val));

elsert.setRight(insert(rt.right(), val));

return rt;}

Franco Guidi Polanco 39

Características del ingreso de elementos a un ABB

Los elementos agregados a un ABB siempre son incorporados inicialmente como hojas.Un conjunto de elementos dado puede generar diversos ABB, dependiendo del orden en que son ingresados.

Franco Guidi Polanco 40

Recorrido Inorden en ABB

10

5 15

18147

12

15

14 18

5

10

127

5 7 10 12 14 15 18 5 7 10 12 14 15 18

Page 11: Arboles03

Franco Guidi Polanco 41

Características del recorrido Inorden de un ABB

Si bien existen muchos ABBs posibles para un mismo conjunto de elementos, el recorrido Inorden de todos estos árboles siempre entrega el conjunto ordenado de menor a mayor.

Franco Guidi Polanco 42

Búsqueda en ABB

Si la raíz del árbol A almacena C, la búsqueda termina exitosamente.Si C es menor que el valor de la raíz de A, buscar en el subárbol izquierdo. Si C es mayor que el valor de la raíz, buscar en el subárbol derecho.La búsqueda termina al hallar el valor C, o al pretender buscar en un subárbol vacío.

Para hallar un elemento con clave C, en un árbol A:

Franco Guidi Polanco 43

Búsqueda en ABB (cont.)

Elem find(BinNode rt, int key) {if (rt == null)

return null;Element it = (Element)rt.element();if ((int)it.key() > key)

return find(rt.left(), key);else if (it.key() == key)

return it;else

return find(rt.right(), key);}

Franco Guidi Polanco 44

Ejemplo de búsqueda en ABB

10

5 15

18147

12

Buscar 12

10

5 15

18147

12

Búsqueda exitosaBuscar 16

Búsqueda infructuosa

Page 12: Arboles03

Franco Guidi Polanco 45

Eliminación de elementos de un ABB

El elemento no existe.El elemento es una hoja o tiene a lo más un hijo.El elemento tiene dos hijos.

Se pueden presentar tres casos:

Franco Guidi Polanco 46

Eliminar nodo que es una hoja o tiene a lo más un hijo

10

5 15

18147

12

10

7 15

1814

12

Franco Guidi Polanco 47

Ejemplo eliminación de nodo con dos hijos

10

5 15

18147

El menor de los elementos mayores (Nodo más a la izquierda del subárbol derecho)

16

17

10

5 16

18147

17

Franco Guidi Polanco 48

Eliminar nodo con dos hijos

1. Hallar el nodo que contiene el menor de los elementos mayores del nodo a eliminar (el elemento más a la izquierda de su subárbol derecho)

2. Reemplazar los datos del nodo eliminar con los del nodo hallado.

3. Eliminar el nodo hallado, que tiene a lo más un hijo, con el procedimiento descrito previamente.

Page 13: Arboles03

Franco Guidi Polanco 49

Utilidad de los árboles binarios de búsqueda

Al buscar, el ABB permite descartar a priori un subconjunto de elementos, en forma análoga a la búsqueda binaria en arreglos ordenados.El ABB presenta además la ventaja de poder ser implementado con punteros (estructura dinámica).La incorporación y eliminación de elementos al ABB es mas rápida que en arreglos ordenados.

Franco Guidi Polanco 50

Importancia de una estructura balanceada en los ABB

La estructura de un ABB es importante al momento de realizar búsquedas en él.

10

5 15

181473

18

15

7

3

5

10

14

En el peor de los casos se hacen 3 iteraciones para una búsqueda.

En el peor de los casos se hacen 7 iteraciones para una búsqueda.