Eliminarnodoarbolbinariobusqueda
Upcoming SlideShare
Loading in...5
×
 

Eliminarnodoarbolbinariobusqueda

on

  • 1,036 views

 

Statistics

Views

Total Views
1,036
Views on SlideShare
964
Embed Views
72

Actions

Likes
0
Downloads
50
Comments
0

3 Embeds 72

http://mluisavel.wordpress.com 63
http://mvelascora.wordpress.com 8
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Eliminarnodoarbolbinariobusqueda Eliminarnodoarbolbinariobusqueda Document Transcript

  • Análisis de Algoritmos Eliminar un elemento de un árbol binario de búsqueda Eliminación de un elemento La eliminación de un nodo de un árbol binario de búsqueda es más complicada que la inserción, puesto que puede suponer la recolocación de varios de sus nodos. En líneas generales un posible esquema para abordar esta operación es el siguiente: 1. Buscar el nodo que se desea borrar manteniendo un enlace a su padre (p) 2. Si se encuentra el nodo hay que contemplar tres casos posibles: a. Si el nodo a borrar no tiene hijos, simplemente se libera el espacio que ocupa b. Si el nodo a borrar tiene un solo hijo, se añade como hijo de su padre (p), sustituyendo la posición ocupada por el nodo borrado. c. Si el nodo a borrar tiene los dos hijos se siguen los siguientes pasos: i. Se busca el máximo de la rama izquierda o el mínimo de la rama derecha. ii. Se sustituye el nodo a borrar por el nodo encontrado. Veamos gráficamente varios ejemplos de eliminación de un nodo: L.I. María Luis Velasco Ramírez 1
  • Análisis de Algoritmos Eliminar un elemento de un árbol binario de búsqueda public boolean delete (int llave) { Nodo actual = raíz; Nodo p = raíz; Bolean hijoizq= trae; while (actual.iDato != llave) { p= actual; if (llave < actual.iDato) { hijoizq= trae; actual.actual.izq // va a la izquierda } else { hijoezq= 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 izquierdo else 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) L.I. María Luis Velasco Ramírez 2
  • Análisis de Algoritmos Eliminar un elemento de un árbol binario de búsqueda 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=successor; successor.izq = actual.izq //conecta sucesor con la rama izq de actual } //fin tiene dos hijos return trae; } fin borrar private Nodo getSucesor(Nodo delNodo) { Nodo sucerorp= delNodo; Nodo sucesor = delNodo; Nodo 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 L.I. María Luis Velasco Ramírez 3 View slide
  • Análisis de Algoritmos Eliminar un elemento de un árbol binario de búsqueda Nota: getSucesor encuentra el mínimo de la rama derecha TAREA para la siguiente clase. Implementa el método getSucesor para encontrar el máximo de la rama izquierda. L.I. María Luis Velasco Ramírez 4 View slide