Prueba insertarbuscarborrarnodoarbol

7
Análisis de Algoritmos sección 401 Ejercicio Insertar Nodos en Árboles Binarios de Búsqueda. Insertar los nodos de la página 2 y realizar la búsqueda de algunos nodos, probar con unos que existan en el árbol y con otros que no. 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; 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; } 1

Transcript of Prueba insertarbuscarborrarnodoarbol

Page 1: Prueba insertarbuscarborrarnodoarbol

Análisis de Algoritmos sección 401Ejercicio Insertar Nodos en Árboles Binarios de Búsqueda.Insertar los nodos de la página 2 y realizar la búsqueda de algunos nodos, probar con unos que existan en el árbol y con otros que no.

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;• }

1

Page 2: Prueba insertarbuscarborrarnodoarbol

Análisis de Algoritmos sección 401Ejercicio Insertar Nodos en Árboles Binarios de Búsqueda.Insertar los nodos de la página 2 y realizar la búsqueda de algunos nodos, probar con unos que existan en el árbol y con otros que no.

2

Page 3: Prueba insertarbuscarborrarnodoarbol

Análisis de Algoritmos sección 401Ejercicio Insertar Nodos en Árboles Binarios de Búsqueda.Insertar los nodos de la página 2 y realizar la búsqueda de algunos nodos, probar con unos que existan en el árbol y con otros que no.

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 borra

if (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

private 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

3

Page 4: Prueba insertarbuscarborrarnodoarbol

Análisis de Algoritmos sección 401Ejercicio Insertar Nodos en Árboles Binarios de Búsqueda.Insertar los nodos de la página 2 y realizar la búsqueda de algunos nodos, probar con unos que existan en el árbol y con otros que no.

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 borrar

4

Page 5: Prueba insertarbuscarborrarnodoarbol

Análisis de Algoritmos sección 401Ejercicio Insertar Nodos en Árboles Binarios de Búsqueda.Insertar los nodos de la página 2 y realizar la búsqueda de algunos nodos, probar con unos que existan en el árbol y con otros que no.

Tarea, hacer la prueba de escritorio borrando los nodos del ejemplo mostrado.

5