Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Implementación de Borrado en árboles binarios de búsqueda (BST), Apuntes de Informática

El proceso de borrado en un árbol binario de búsqueda (bst). El algoritmo se basa en encontrar el nodo predecesor, eliminarlo y actualizar los punteros de los nodos vecinos. Se detalla el método remove(key, node) y se presenta un ejemplo de borrado de un nodo con clave 5. El documento puede ser útil para estudiantes de informática o ciencias de la computación que estén estudiando datos y estructuras de datos, especialmente árboles binarios de búsqueda.

Tipo: Apuntes

2013/2014

Subido el 21/05/2014

beaacos
beaacos 🇪🇸

5

(1)

2 documentos

1 / 5

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
ABB: Implementación Borrado (1/4)
1
(continua…)
En clase BSTree:
public void remove(K key) {
if (root == null) {
System.out.println("Cannot remove: The tree is empty");
return;
}
root = BSTNode.remove(key, root);
}
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Implementación de Borrado en árboles binarios de búsqueda (BST) y más Apuntes en PDF de Informática solo en Docsity!

(continua…)

En clase BSTree:

public void remove(K key) {

if (root == null) { System. out.println("Cannot remove: The tree is empty"); return; } root = BSTNode. remove(key, root);

}

private BSTNode<K, E> remove(K key, BSTNode<K, E> node) { if (node == null) { System. out .println("Cannot remove: The key doesn't exist"); return null; } if (key.equals(node.key)) { // Localizado el nodo a borrar // Es un nodo hoja if (!node.hasLeft() && !node.hasRight()) { return null; } // El hijo izquierdo está vacío if (!node.hasLeft()) { node.right.parent = node.parent; return node.right; } // El hijo derecho está vacío if (!node.hasRight()) { node.left.parent = node.parent; return node.left; } // Ninguno de los hijos está vacío

….. Continua en siguiente trasparencia……

Se cambia el puntero del nodo Hijo del que queremos borrar para que apunte al Padre del que queremos borrar

Se cambia el puntero del nodo Hijo del que queremos borrar para que apunte al Padre del que queremos borrar

No cambia el puntero de los Hijos del nodo que queremos borrar porque no tiene hijos

No tiene hijos el nodo a borrar

Solo tiene un hijo el nodo a borrar

ABB: Ejemplo Borrar nodo 5

Paso 1

Paso 2

Nodo 5 localizado. Tiene 2 hijos. Se busca el nodo predecesor (mayor izquierda)

Nodo eliminar

ramaIzq ramaDer mayorIzq

ramaDer MayorIzq

Se cambian los punteros de mayorIzq y ramaDer

Se elimina el nodo mayorIzq del subarbol ramaIzq

La llamada recursiva devuelve el nodo mayorIzq y se cambia el puntero hijo del nodo del Paso 1

private BSTNode<K, E> remove(K key, BSTNode<K, E> node) {

….. Continua en siguiente trasparencia……

  1. Se busca el nodo (izquierda o derecha según valor). DEVUELVE Null si es un nodo hoja.
    • De esta forma el puntero izquierdo o derecho del nodo padre apunta a nulo.
  2. Si el nodo localizado solo tiene un hijo se sustituye el nodo localizado por el nodo hijo. DEVUELVE el nodo hijo izquierdo o derecho. - De esta forma el puntero izquierdo o derecho del nodo padre apunta al nodo devuelto.
  3. Si el nodo localizado tiene dos hijos:
    1. Se busca el nodo mayor del subarbol izquierdo (nodo predecesor).
    2. Se elimina el nodo predecesor localizado (mayor del subarbol izquierdo). LLAMADA RECURSIVA.
    3. El nodo localizado se cambia por el nodo predecesor.
    4. DEVUELVE el nodo predecesor.
      • De esta forma el puntero izquierdo o derecho del nodo padre apunta al nodo sucesor (mayorIzq).

En clase BSTNode: