You are on page 1of 19

TREAPS

TREAP

TREE

HEAP

Es un ABB

2
Llamada Prioridad

LA INSERCIN DE UN NODO

CLAVE Determinada, En las hojas de un AB

Todas CLAVES Cumplen Propiedad ABB

Puede ser Propiedad HEAP

Propiedad HEAP Tener Prioridades de los hijo mayores al padre

PARA REESTABLECER Propiedad HEAP

Al nodo, recin insertado

Se hace ASCENDER

Mediante ROTACIONES

Padre Prioridad MAYOR

Padre Prioridad MENOR

Nuevo Nodo RAIZ

EJEMPLO

Clave

9 , 4, 15, 2, 5, 12, 20, 7, 8

Prioridad 10, 12, 13, 22, 24, 18, 40, 33, 11

Se ilustra un treap, donde en la parte superior se muestra la clave y en la inferior de cada nodo la prioridad. El rbol se form ingresando las claves de acuerdo a un orden creciente de las prioridades; es decir en orden: 10, 12, 13, 18, 22, 24, 33 y 40. El nodo con menor valor de prioridad se ubica en la raz

No se cumple la propiedad, que la prioridad del nodo 8 sea mayor que la de su padre, puede restablecerse esta condicin mediante la rotacin a la izquierda en el nodo padre, el 7 en este caso.

Del nodo con clave 8 hacia abajo se tiene un heap, pero no hacia arriba. Por esto es preciso efectuar otra rotacin a la izquierda en el nodo padre del 8, el nodo con clave 5

Finalmente volviendo a rotar a la izquierda en el nodo con clave 4, padre del nodo con clave 8, se logra el treap

El descarte del nodo con clave 8, sigue el proceso inverso a su insercin, se lo hace descender, mediante rotaciones con el nodo hijo que tenga menor prioridad, hasta llegar a ser una hoja. La operacin descarte se ve simplificada si los enlaces derecho e izquierdo de las hojas apuntan a un nodo de fondo o centinela que tenga un valor mayor de prioridad que los valores de prioridad que puedan tener los nodos.

LA INSERCIN DE UN NODO
void insertar(Clave k, Float p, Nodo t) {// k es el dato a insertar, p es la prioridad aleatoria if (t== null) t = new Nodo(k,p); else if(k < t.info){ insertar(k , p , t.izquierdo); if( t.izquierdo. Prioridad() < t.Prioridad()) rotarDerecha(t); } else{ insertar(k , p , t.derecho); if( t.derecho.Prioridad() < t.Prioridad()) rotarIzquierda(t); } }

ROTACIONES

Void rotarIzq(Nodo p){ q=p.der; p.der=q.izq; q.izq=p }

Void rotarDer(Nodo p){ q=p.izq; p.izq=q.der; q.der=p }

BSQUEDA
Desde la raz

INICIA

Comparando el valor del dato a buscar

Con el valor del nodo

MENOR

Invoca al hijo Izquierdo Invoca al hijo Derecho

MAYOR

FINALIZA

Valores coinciden, Retorna true.

LA BSQUEDA DE UN NODO

Boolean buscar( T k, Nodo t) { if(t== null) return false; if(t.info==k) return true; if(k<t.info) return buscar(k , t.izquierdo ); else return buscar(k , t.derecho ); }

ELIMINACIN
Mediante ROTACIONES

BSQUEDA dato

Se desciende

HASTA

ELIMINACIN

ELIMINACIN

LA ELIMINACIN DE UN NODO

Nodo eliminar(T k, Nodo t) { Nodo r=null; if(t.info == k){ r= t; t=eliminar_Raiz(t); } if(k <t.info) r= eliminar(k, t.izquierdo ); else r= eliminar(k, t.derecho ); return r; }

LA ELIMINACIN DE UN NODO
Nodo eliminar_Raiz( Nodo t ) { if(t.esHoja() || t==null) return null; if(t.izquierdo.Prioridad < t.derecho.Prioridad){ rotarDerecha(t) ; eliminar_Raiz(t.derecho); } else { rotarIzquierda(t); eliminar_Raiz(t.izquierdo); }

Gracias por su atencin

YURLEY XIOMARA ROJAS SANCHEZ


1150273 YURLEY.ROJAS@GMAIL.COM

GUSTAVO ALFONSO TARAZONA PAEZ


1150471 GUSTAVOTARAZONA@GMAIL.COM

JULIO -2012 copyright

You might also like