Prueba insertarbuscarborrarnodoarbol

  • 985 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
985
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
61
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. class NodoArbol{ int Dato; NodoArbol izq; NodoArbol der; public NodoArbol (int dato){ this.dato=dato; izq=der=null; }}public void insertar (int dato){ NodoArbo nuevonodo= new NodoArbol(dato); if (raíz == null) raíz = nuevonodo;else { NodoArbol actual = raíz; NodoArbol p; while(true) { p= actual; if (dato < actual.dato) //ir a la izquierda { actual = actual.izq; if (actual == null ) { p.izq = nuevonodo; return; } } //fin ir a la izquierda else //es mayor { actual = actual.der; if (actual == null) { p.der = nuevonodo; return; } } //fin else ir derecha } //fin while } //fin else no raíz} //fin insert public NodoArbol find (int llave){ Nodo actual = raíz; while (actual.dato != llave) { if (llave menor actual.dato) actual = actual.izq; else actual = actual.der; if (actual == null) return null;} //fin while return actual;}<br />public boolean delete (int llave){ NodoArbol actual = raíz; NodoArbol p = raíz; Boolean hijoizq= true; while (actual.Dato != llave) { p= actual; if (llave < actual.Dato) { hijoizq= true; actual.actual.izq // va a la izquierda } else { hijoizq= false; actual= actual.der // va a la derecha } if (actual == null) // no lo encontro return false; } // fin while // encontro el nodo a borrar// si no tiene hijo, simplemente lo borraif (actual.izq == null && actual.der == null) { (if actual == raiz) // si es la raíz root = null;// el árbol esta vacío else if(hijoizq) p.izq = null //lo desconecta de p else p.der = null; }// si no tiene hijo derecho, lo reemplaza con el subárbol izquierdoelse if( actual.der == null) if (actual == raiz) raiz = actual.izq; else if (hijoizq) p.izq =actual.izq; else p.der= actual.izq; // si no tiene hijo izquierdo, lo reemplaza con el subarbol derecho else if (actual.izq == null) if (actual == raiz) raiz = actual.der; else if (hijoizq) p.izq =actual.der; else p.der= actual.der; else // tiene dos hijos, es reemplazado por el sucesor { // llama al metodo obtener sucesor del nodo a borrar (actual) Nodo sucesor = getSucesor (actual); // conecta p de actual con el sucesor if (actual ==raiz) raiz = sucesor; else if (hijoizq) p.izq= sucesor; else p.der=succesor; successor.izq = actual.izq //conecta sucesor con la rama izq de actual } //fin tiene dos hijos return true; } fin borrarprivate NodoArbol getSucesor(Nodo delNodo) { NodoArbol sucerorp= delNodo; NodoArbol sucesor = delNodo; NodoArbol actual= delNodo.der; / va al hijo derecho while (actual != null) { sucesorp = sucesor; sucesor = actual; actual = actual.izq; } // if (sucesor != delNodo.der) { sucesorp.izq= sucesor.der; sucesor.der = delNodo.der; } return sucesor; } // fin getSucesor<br />Tarea, hacer la prueba de escritorio borrando los nodos del ejemplo mostrado.<br />