Professional Documents
Culture Documents
TREAP
TREE
HEAP
Es un ABB
2
Llamada Prioridad
LA INSERCIN DE UN NODO
Se hace ASCENDER
Mediante ROTACIONES
EJEMPLO
Clave
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
BSQUEDA
Desde la raz
INICIA
MENOR
MAYOR
FINALIZA
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); }