Arboles Binarios

July 2, 2018 | Author: Diego Alva Villavicencio | Category: Computer Programming, Areas Of Computer Science, Mathematics, Science, It/Computer Sciences
Share Embed Donate


Short Description

Download Arboles Binarios...

Description

ARBOLES BINARIOS Ing. Juan A. Cañedo Trasviña

Árbol binario. 



Un árbol binario es un árbol en el que cada nodo no puede tener más de dos hijos o descendientes. Es un conjunto de nodos que es, o bien el conjunto vació, o un conjunto que consta de un nodo raíz enlazado a dos árboles binarios disjuntos denominados subárbol izquierdo y subárbol derecho. Cada uno de estos subárboles es, a su vez, un árbol binario.

B

A

A

A

B

C

D

B C

Ing. D Juan A. Cañedo Trasviña F E

C

Árbol binario. 



Un árbol binario es un árbol en el que cada nodo no puede tener más de dos hijos o descendientes. Es un conjunto de nodos que es, o bien el conjunto vació, o un conjunto que consta de un nodo raíz enlazado a dos árboles binarios disjuntos denominados subárbol izquierdo y subárbol derecho. Cada uno de estos subárboles es, a su vez, un árbol binario.

B

A

A

A

B

C

D

B C

Ing. D Juan A. Cañedo Trasviña F E

C

Representación de un árbol binario en la memoria. 

Cada noto tiene la siguiente forma:

Raíz

izq info der

R A B

D C

Ing. Juan A. Cañedo Trasviña

E

Clase nodo de un A.B. class nodo{ nodo izq; nodo der; int dato; public nodo(int x) { dato=x; izq=der=null; } }

Ing. Juan A. Cañedo Trasviña

Algoritmo para crear un A.B. Procedimiento

crearbol(q:nodo)

escribe(‘Dame el dato=')

leer(q(dato)) mensaje(‘Tiene rama izquierda')

leer(op) Si op = 'S' Entonces p=crear nodo() q(izq) = p crearbol(p) En caso contrario

q(izq) = null mensaje(‘ Tiene rama derecha')

leer(op) Si op = 'S' Entonces p=crear nodo() q(der) =p crearbol(p) En caso contrario

q(der) = null

Ing. Juan A. Cañedo Trasviña

Operaciones basicas sobre un árbol binario 

Recorrer árbol ya sea en:   

      

Preorden Inorden Postorden

Insertar un nodo Eliminar un nodo Buscar nodo con cierta información Contar nodos Contar hojas. Nivel del árbol binario. Obtener el peso del árbol. Ing. Juan A. Cañedo Trasviña

Recorridos de un árbol de Búsqueda Binaria (ABB) 

Recorrido en preorden (prefijo)   

Visita la raíz. Recorre el subárbol izquierdo. Recorre el subárbol derecho.

RID

A

C

B

Preorden = A B D G C E H I F E

D

G

H

F

I

Ing. Juan A. Cañedo Trasviña

Recorridos de un árbol binario. Se denomina recorrido al proceso que permite acceder o visitar cada nodo que componen al árbol binario una sola vez. Las tres formas diferentes y todas ellas de naturaleza recursiva, los cuales son: 

Preorden.



Inorden.



Postorden. Ing. Juan A. Cañedo Trasviña

Recorrido en Preorden. Examinar la raíz (escribe el dato del nodo).  Recorrer el subárbol izquierdo.  Recorrer el subárbol derecho. 

A

C

B

Preorden: ABDGCEHIF E

D

G

H

F

I Ing. Juan A. Cañedo Trasviña

Algoritmo del recorrido en preorden public void Preorden(nodo p) { if (p != null) { Console.WriteLine(“Dato={0}”,p.dato); Preorden(p.izq); Preorden(p.der); } } Ing. Juan A. Cañedo Trasviña

Recorrido en Inorden (infijo) Recorre el subárbol izquierdo.  Examinar la raíz (escribe el dato del nodo).  Recorre el subárbol derecho. 

A

C

B

Inorden: E

D

G

H

F

I Ing. Juan A. Cañedo Trasviña

DGBAHEI CF

Algoritmo del recorrido en Inorden public void Inorden(Nodo p) { if (p != null) { Inorden(p.izq); Console.WriteLine(“Dato={0}”,p.dato); Inorden(p.der); } } Ing. Juan A. Cañedo Trasviña

Recorridos en Postorden (postfijo)   

Recorre el subárbol izquierdo. Recorre el subárbol derecho. Examinar la raíz (escribe el dato del nodo). A

E

D

G

Postorden

C

B

H

F

I

Ing. Juan A. Cañedo Trasviña

:GDBHIEFCA

Algoritmo del recorrido en postorden public void Postorden(Nodo p) { if (p != null) { Postorden(p.izq); Postorden(p.der); Console.WriteLine(“Dato={0}”,p.dato); } } Ing. Juan A. Cañedo Trasviña

Conversión de un árbol general en un árbol binario Deben enlazarse los hijos de cada nodo en forma horizontal (los hermanos).  Deben enlazarse en forma vertical el nodo padre con el hijo que se encuentra más a la izquierda. Además, debe eliminarse el vínculo de ese padre con el resto de sus hijos. de haber realizado los pasos  Después anteriores, pasaremos a rota el diagrama resultante 45 grados hacia la izquierda. Obteniendo como resultado un arbol binario. 

Ing. Juan A. Cañedo Trasviña

Ejemplo de conversión de un árbol general en un árbol binario A B

E

C

F

D H

G L

M Ing. Juan A. Cañedo Trasviña

I

J

K

Resultado final un A.B. A B E

C F

G L

D H

M

I J Ing. Juan A. Cañedo Trasviña

Arboles de expresión aritmética Una aplicación muy importante de los arboles es la de poder almacenar una expresión aritmética en memoria. Un árbol de expresión es un árbol binario con las siguientes propiedades: Cada hoja debe ser un operando. Los nodos padres deben ser operadores. Los subárboles son subexpresiones en los que el nodo raíz es un operador. Ing. Juan A. Cañedo Trasviña

Ejemplo Dada la expresion a*(b+c)+d + * a

d +

b

c Ing. Juan A. Cañedo Trasviña

Árboles Binarios de Búsqueda (ABB) Ing. Juan A. Cañedo Trasviña

Árboles Binarios de Búsqueda 

Un árbol es un ABB  si éste es binario y sus nodos son subárboles de búsqueda binarios y contienen información ordenada tal que todos los elementos a la izquierda de la raíz son menores a la raíz y todos lo elementos a la derecha de la raíz son mayores a la raíz.

Ing. Juan A. Cañedo Trasviña

Características de un ABB 





Todos los nodos a la izquierda son menores al padre. Todos los nodos a la derecha son mayores al padre. Y cada nodo solo pueden tener 2 hijos a lo mucho. 50 90

40 26 8

45 34

42

110

85 68

88

100

120 105

95 Ing. Juan A. Cañedo Trasviña

102

Clase nodo de un ABB Class Nodo{ nodo izq; nodo der; int dato; }

Ing. Juan A. Cañedo Trasviña

Inserción en un ABB La inserción es una operación que se puede realizar eficientemente en un árbol binario de búsqueda. La estructura crece conforme se inserten elementos al árbol.  Los pasos que deben realizarse para insertar un elemento a un ABB son los siguientes: 



Debe compararse el valor o dato a insertar con la raíz del árbol. Si es mayor, debe avanzarse hacia el subárbol derecho. Si es menor, debe avanzarse hacia el subárbol izquierdo. Ing. Juan A. Cañedo Trasviña

Inserción en un ABB (cont.) 

Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las siguientes condiciones 



El subárbol derecho es igual a vació, o el subárbol izquierdo es igual a vació; en cuyo caso se procederá a insertar el elemento en el lugar que le corresponde. El valor o dato que quiere insertarse es igual a la raíz del árbol; en cuyo caso no se realiza la inserción.

Ing. Juan A. Cañedo Trasviña

Inserción en un ABB (cont.) Algoritmo Si NODO ≠ Null{ Si (INFOR < NODO.INFO) Regresar a INSERCION1 con NODO.IZQ e INFOR sino si ( INFOR > NODO.INFO) Regresar a INSERCION1 con NODO.DER e INFOR sino Escribir “El nodo ya se encuentra en el árbol” } // } si else CREA (OTRO) {Crear un nuevo nodo} Hacer OTRO.IZQ = null, OTRO.DER = null, OTRO.INFO = INFOR y NODO = OTRO } Ing. Juan A. Cañedo Trasviña

Inserción en un ABB (cont.) 

Supóngase que quieren insertarse las siguientes los siguientes datos en un árbol binario de búsqueda que se encuentra vació.

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

Ing. Juan A. Cañedo Trasviña

Inserción en un ABB (cont.) Solución 120 –87 – 43 – 65 – 140 – 99 – 130 – 22 – 56 120

140

87

99

43

130

65

22

56

Ing. Juan A. Cañedo Trasviña

Eliminar un nodo Para eliminar un nodo existen los siguientes casos: 1. 2. 3.

Si el elemento a borrar es Terminal (hoja), Si el elemento a borrar tiene un solo hijo, Si el elemento a borrar tiene los dos hijo,

Ing. Juan A. Cañedo Trasviña

Eliminar un nodo (cont.) Caso 1 Si el elemento a borrar es terminal (hoja), simplemente se elimina. aux = aux.izq = null 

Ejemplo eliminar nodo 7

6

6 1

1

8 7

6

9

8 7

1 9

Ing. Juan A. Cañedo Trasviña

8 9

Eliminar un nodo (cont.) 

Caso 2 Si el elemento a borrar tiene un solo hijo, entonces tiene que sustituirlo por el hijo que esta a su derecha.

Ejemplo: eliminar nodo 8 7 1

7

7 8

1

1

8

9

9 Ing. Juan A. Cañedo Trasviña

9

Ing. Juan A. Cañedo Trasviña

Eliminar un nodo (cont.) Caso 3 Si el elemento a borrar tiene los dos hijos, entonces se tienen que sustituir por el nodo que se encuentra más a la izquierda en el subárbol derecho, o por el nodo que se encuentra más a la derecha en el subárbol izquierdo. 

Ejemplo: eliminar el 6

6 1

7

7 8 9

1

8

1 7

9

8 9

Buscar nodo con información procedimiento busqueda(nodo p; entero llave) si p != null entonces si llave != p(dato) entonces si llave < p(dato) entonces p
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF