Sunteți pe pagina 1din 24

Un rbol binario no vaco, de raz R , es binario de bsqueda si:

En caso de tener subrbol izquierdo, la raz R debe ser mayor que el valor mximo almacenado en el subrbol izquierdo, y que el subrbol izquierdo sea un rbol binario de bsqueda.

En caso de tener subrbol derecho, la raz R debe ser menor que el valor mnimo almacenado en el subrbol derecho, y que el subrbol derecho sea un rbol binario de bsqueda.

50 40 26 8 34 42 90

45 68

85 88 95 102 100

110 110 105

izq info der

Raz R A B C D E

Class Nodo { nodo izq; nodo der; int dato; }

Operaciones que se pueden Realizar en un ABB


Buscar un Elemento
Insertar un Elemento Borrar un Elemento Movimientos a travs de un rbol Informacin
Comprobar si un rbol est vaco. Calcular el nmero de nodos. Comprobar si el nodo es hoja. Calcular la altura de un nodo. Calcular la altura de un rbol.

Izquierda Derecha Raz.)

Bsqueda
Consiste acceder a la raz del rbol, si el elemento a localizar coincide con

ste la bsqueda ha concluido con xito, si el elemento es menor se busca en


el subrbol izquierdo y si es mayor en el derecho. Si se alcanza un nodo hoja y el elemento no ha sido encontrado se supone que no existe en el rbol. Cabe destacar que la bsqueda en este tipo de rboles es muy eficiente, representa una funcin logartmica. El mximo nmero de comparaciones que necesitaramos para saber si un elemento se encuentra en un rbol binario de bsqueda estara entre [log2(N+1)] y N, siendo N el nmero de nodos. La

bsqueda de un elemento en un ABB (rbol Binario de Bsqueda) se puede


realizar de dos formas, iterativa o recursiva.

Bsqueda
Si dato < NODO.info Si NODO.IZQ == null Escribir El nodo no se encuentra en el rbol Si no Bsqueda (NODO.izq,dato) Si no Si Dato > NODO.INFO entonces Si NODO.DER = null Si no Bsqueda (NODO.der,dato) Si no Escribir El NODO se encuentra en el rbol si nodo != null si Dato < NODO .INFO Bsqueda (Nodo.izq,Dato) si no si Dato > No dato.der Bsqueda (No dato.der,dato) si no escribir El Dato se encuentra Si no Escribir El dato no se encuentra en el rbol

Insercin

Insercin
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 no CREA (OTRO) {Crear un nuevo nodo} Hacer OTRO.IZQ = null, OTRO.DER = null, OTRO.INFO = INFOR y NODO = OTRO }

Insercin
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 no CREA (OTRO) { Crear un nuevo nodo } Hacer OTRO.IZQ = null, OTRO.DER = null, OTRO.INFO = INFOR y NODO = OTRO }

Insercin

Insercin

120

87

140

43

65

130

22

56

I 99

Borrado
La operacin de borrado no es tan sencilla como las de bsqueda e insercin. Existen varios casos a tener en consideracin:

Borrar un nodo sin hijos nodo hoja

Borrar un nodo con un subrbol hijo


Borrar un nodo con dos subrboles hijo

Borrado

6 1 7

6 8 7 1 8

8
9

Borrado

Ejemplo: eliminar nodo 8


7 1 8 9 1 7 8 9 1 7 9

Borrado
Si no { aux = otro.izq aux1 = Aux while (aux.der != null ) aux1 = aux aux = aux.der } otro.info = aux.info otro = aux aux1.der = aux.izq quita (otro) (null) si no Escribir (el nodo no se encuentra en el rbol) }

Borrado

120

87

140

43

65

130

22

56

I 99

Borrado
si NODO !=null entonces si Dato < NODO.info Eliminacin (NODO.izq, Dato) si no si dato > NODO.INFO entonces Eliminacin (NODO.der, Dato si no

otro = NODO
si otro.der == null entonces NODO = otro.izq si no

si otro.izq == null
entonces NODO = otro.der

Recorridos
Se puede hacer un recorrido de un rbol en profundidad o en anchura. Los recorridos en anchura son por niveles, se realiza horizontalmente desde la

raz a todos los hijos antes de pasar a la descendencia de alguno de los hijos.
El recorrido en profundidad lleva al camino desde la raz hacia el descendiente ms lejano del primer hijo y luego contina con el siguiente hijo. Como recorridos en profundidad tenemos inorden, preorden, postorden. Una propiedad de los ABB es que al hacer un recorrido en profundidad inorden obtenemos los elementos ordenados de forma ascendente.

PREORDEN (NODO) { NODO es un dato de tipo apuntador } {INFO, IZQ, DER son campos del registro } Si nodo != null entonces { Visitar NODO {escribir NODO.INFO } llamar a preorden con NODO.IZQ { llamada recursiva a preorden con la rama izquierda del nodo en cuestin } llamar a preorden con NODO.DER { llamada recursiva a preorden }
}

S-ar putea să vă placă și