10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un...

27
Tema 10: Árbol binario de búsqueda Estructuras de datos (Prof. Edgardo A. Franco) 1 M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Transcript of 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un...

Page 1: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

Tema 10: Árbol binario de búsqueda

Estructuras de datos (Prof. Edgardo A. Franco)

1M. en C. Edgardo Adrián Franco Martínez http://[email protected]

@edfrancom edgardoadrianfrancom

Page 2: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

Contenido• Árbol binario de búsqueda• Búsquedas

• Inserción

• Eliminación

• Operaciones útiles en un ABB• Contar nodos

• Sumar nodos

• Contar hojas

• Calcular la profundidad

• Comentarios importantes• Liga web

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

2

Page 3: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Un árbol binario de búsqueda es un tipoespecial de árbol binario cuya principalcaracterística es que la información sealmacena en los nodos cuidando mantenercierto orden.

13

21

5 18

15

25

40

36

33

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

3

Page 4: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• En un ABB sus nodos también son ABB y contieneninformación ordenada de tal manera que todos loselementos a la izquierda de la raíz son menores a laraíz y todos los elementos a la derecha de la raízson mayores a la raíz.

x

y<x z>x

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

4

Page 5: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• En un ABB

• Todos los nodos a la izquierda son menores al padre.

• Todos los nodos a la derecha son mayores al padre.

• Un nodo solo puede tener 2 hijos a lo mucho.

13

21

5 18 25 36

33 13

21

17 18 2522

33

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

5

Page 6: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Los árboles binarios de búsqueda se utilizantípicamente como estructura de datos para larepresentación de conjuntos de datos con unaclave única y operaciones:

• Inserta: para insertar un elemento dado en elconjunto.

• Suprime: para suprimir un elemento determinadode el conjunto

• Busca: para saber y obtener si un elemento dadopertenece o no al conjunto.

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

6

Page 7: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• La inserción es una operación que se puede realizareficientemente en un árbol binario de búsqueda. Laestructura crece conforme se inserten elementos alárbol.

• Los pasos que deben realizarse para insertar unelemento a un ABB son los siguientes:

1. Debe compararse el valor o (clave del elemento) ainsertar con la raíz del árbol. Si es mayor, debeavanzarse hacia el subárbol derecho. Si es menor, debeavanzarse hacia el subárbol izquierdo.

Árbol binario de búsqueda (Inserción)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

7

Page 8: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

2. Repetir sucesivamente el paso 1 hasta que se cumplaalguna de las siguientes condiciones

• El subárbol derecho es igual a vació, o el subárbol izquierdo esigual a vació; en cuyo caso se procederá a insertar el elemento enel lugar que le corresponde.

• El valor o clave que quiere insertarse es igual a la raíz del árbol; encuyo caso no se realiza la inserción.

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

8

Page 9: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

Árbol binario de búsqueda (Inserción)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

9

Page 10: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Supóngase que quieren insertarse elementos con lassiguientes claves, en un árbol binario de búsqueda que seencuentra vació.

120 –87 – 43 – 90 – 140 – 99 – 130 – 22 – 56

Árbol binario de búsqueda(Inserción: Ejemplo 01)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

10

Page 11: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Si se tiene la siguiente secuencia de inserción: 120 –87 – 43 – 90 – 140 – 99 – 130 – 22 – 56

120

87 140

43 130

56I

22

90

99

Árbol binario de búsqueda(Inserción: Ejemplo 02)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

11

Page 12: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• El árbol de búsqueda facilita el almacenamiento ybúsqueda de información contenida en susnodos, por medio de un campo clave.

• La búsqueda consiste en acceder a la raíz delárbol, si la clave del elemento a localizar coincidecon ésta la búsqueda ha concluido con éxito, si laclave del elemento es menor se busca en elsubárbol izquierdo y si es mayor en el derecho. Sise alcanza un nodo hoja y la clave no ha sidoencontrado se supone que no existe en el árbol.

Árbol binario de búsqueda (Búsquedas)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

12

Page 13: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• La búsqueda en un ABB es muy eficiente,representa una función logarítmica.

• El máximo número de comparaciones quenecesitaríamos para saber si un elemento seencuentra en un árbol binario de búsquedaestaría entre [log2(N+1)] y N, siendo N el númerode nodos.

• La búsqueda de una clave de elemento en unABB (Árbol Binario de Búsqueda) se puederealizar de dos formas, iterativa o recursiva.

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

13

Page 14: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Si se habla de un árbol binario completamentelleno este tendrá 2n-1 elementos, por lo que elorden de complejidad de la búsqueda será idealO(log2(N+1)).

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

14

Page 15: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

Buscar el 25

13

21

10 18 2540

33

Encontrado

Paso3

13

21

10 18 2540

33

¿El 25 es mayor o menor que el 21?

Paso1

NO “Ir por la derecha” 13

21

10 18 2540

33

¿El 25 es mayor o menor que el 33?

Paso2

SI ”Ir por la izquierda”

Árbol binario de búsqueda(Búsquedas: Ejemplo 01)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

15

Page 16: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Debido a que al eliminar un nodo, no se deseaeliminar al subárbol de debajo de este, esnecesario realizar los siguientes casos:

1. Si el elemento a borrar es terminal (hoja)

2. Si el elemento a borrar tiene un solo hijo

3. Si el elemento a borrar tiene los dos hijos

Árbol binario de búsqueda (Eliminación)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

16

Page 17: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Caso 1

• Si el elemento a borrar es terminal (hoja), simplemente se elimina.

6

2 8

3

1 4

Eliminar nodo hojaEliminar 3

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

17

Page 18: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Caso 2

• Si el elemento a borrar tiene un solo hijo, entonces tiene que ser sustituido por el hijo

6

2 8

3

1 4

Eliminar nodo con un hijoEliminar 4

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

18

Page 19: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• Caso 3

• Si el elemento a borrar tiene los dos hijos,entonces se tienen que sustituir por el nodo:

1. Que se encuentra mas a la derecha en el subárbolizquierdo, o por el nodo

2. Que se encuentra mas a la izquierda en el subárbolderecho.

• Nota: Si el nodo sustituto tuviera un hijo, lo colocamos en lugarde este.

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

19

Page 20: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

7

3 8

4

1 5

6

7

4 8

1 5

6

Eliminar nodo con dos hijosEliminar 3

eliminar

copiarvalor

y eliminar

• Remplazar el dato del nodo que se desea eliminar con el dato del nodo más pequeño del subárbol derecho

• Después, eliminar el nodo más pequeño del subárbol derecho (caso fácil)

Árbol binario de búsqueda(Eliminación: Ejemplo 01)

Eligiendo sustituir por el más a la izquierda del

subárbol derecho. Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

20

Page 21: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

Eliminar nodo con dos hijosEliminar 2

6

3 8

3

1 4

5

3.5

Árbol binario de búsqueda(Eliminación)

Eligiendo sustituir por el más a la izquierda del

subárbol derecho.6

2 8

3

1 4

5

3.5

• Remplazar el dato del nodoque se desea eliminar con eldato del nodo más pequeñodel subárbol derecho

• Importante aplicarnuevamente la regla al eliminaral nodo que remplaza, si estetiene un hijo.

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

21

Page 22: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

Operaciones útiles en un ABB(Contar nodos del ABB)

• El conocer el número de nodos en un árbol binariode búsqueda puede resultar útil para distintasaplicaciones de los mismos.

Si retomamos las operaciones hechas en C del árbol binario…

//Cuenta los nodos que hay a partir de una posición P

int CuentaNodos(arbol *a,posicion p)

{

if(NullNode(a,p))

{

return 0;

}

else

{

return (1+ CuentaNodos(a,RightSon(a,p)) + cuentaNodos(a,LeftSon(a,p));

}

}

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

22

Page 23: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• El conocer la suma de los valores de las claves de losnodos en un árbol binario de búsqueda puederesultar útil para distintas aplicaciones de losmismos.

Operaciones útiles en un ABB(Sumar las claves de los nodos del ABB)

//Suma el valor de las claves de los nodos a partir de una posición

int SumaNodo(arbol *a, posicion p)

{

elemento e;

if(NullNode(a,p))

{

return 0;

}

else

{

e=ReadNode(a,p);

return e.clave+SumaNodo(a,RightSon(a,p))+SumaNodo(a,LeftSon(a,p));

}

}

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

23

Page 24: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• El conocer la profundidad de un árbol o subárbolbinario de búsqueda puede resultar útil paradistintas aplicaciones de los mismos.

Operaciones útiles en un ABB(Calcular la profundidad del ABB)

//Calcula la profundidad de un árbol a partir de una posicion p

int Profundidad(arbol *a, posicion p)

{

if(NullNode(a,p))

return 0;

//Retornar la mayor profundidad (Derecha o Izquierda)

if (Profundidad(a,RightSon(a,p)) > Profundidad(a,LeftSon(a,p)))

return Profundidad(a,RightSon(a,p)) + 1;

else

return Profundidad(a,LeftSon(a,p) + 1;

}

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

24

Page 25: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• El contar las hojas de un árbol binario de búsquedapuede resultar útil para distintas aplicaciones de losmismos.

//Cuenta hojas de un árbol a partir de una posición p

int ContarHojas(arbol *a, posicion p)

{

if(NullNode(a,p))

return 0;

else if(NullNode(a,LeftSon(a,p))) && (NullNode(a,RightSon(a,p)))

return 1;

else

return ContarHojas(a,LeftSon(a,p)))+ContarHojas(a,RightSon(a,p)));

}

Operaciones útiles en un ABB(Contar las hojas del ABB)

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

25

Page 26: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

• El orden de inserción de los datos, determina la forma delABB.

• Se tendrá el peor caso si se insertan los datos en formaordenada

• La forma del ABB determina la eficiencia del proceso debúsqueda.

13

10

18

21

25

Este árbol está desbalanceadoporque los valores se agregaron en el siguiente orden:10, 13, 18, 21, 25, 33, 40

Árbol binario de búsqueda (ABB) (Edgardo A. Franco)

Comentarios importantes

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

26

Page 27: 10 Árbol binario de búsqueda• El conocer la suma de los valores de las claves de los nodos en un árbol binario de búsqueda puede resultar útil para distintas aplicaciones de

Liga Web

• Inserta elimina y busca en un árbol binario

https://www.cs.usfca.edu/~galles/visualization/BST.html

Estr

uct

ura

s d

e d

ato

s1

0 Á

rbo

l bin

ario

de

squ

eda

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

27