Eliminando un elemento de un árbol de búsqueda binaria
Eliminar un elemento de un árbol de búsqueda binaria es un poco más complejo que los pasos anteriores, ya que debemos manejar diferentes casos dependiendo del tipo de nodo:
- Si el nodo no tiene hijos (un nodo hoja), simplemente elimínalo.
- Si el nodo tiene un solo hijo, reemplázalo con su único hijo.
- Si el nodo tiene dos hijos, reemplázalo con el valor mínimo del subárbol derecho o el valor máximo del subárbol izquierdo.
public static BSTNode delete(int value, BSTNode current) {
if (current == null)
return current;
if (value < current.value)
current.leftChild = delete(value, current.leftChild);
else if (value > current.value)
current.rightChild = delete(value, current.rightChild);
else if (value == current.value) {
if (current.leftChild!= null && current.rightChild!= null) {
int min = current.rightChild.value;
BSTNode temp = current.rightChild;
while (temp.leftChild!= null) {
min = temp.leftChild.value;
temp = temp.leftChild;
}
current.value = min;
current.rightChild = delete(min, current.rightChild);
} else if (current.leftChild == null)
return current.rightChild;
else if (current.rightChild == null)
return current.leftChild;
}
return current;
}
Para probar este método, elimine algunos nodos e imprima el árbol:
public static void main(String[] args) {
BSTNode root = new BSTNode(12);
root = insert(7, root);
root = insert(20, root);
root = insert(5, root);
root = insert(9, root);
root = insert(21, root);
// Eliminar algunos nodos
root = delete(12, root);
root = delete(20, root);
root = delete(9, root);
// Imprimir el árbol para verificar la eliminación
System.out.println("Recorrido después de la eliminación: ");
inorderTraversal(root);
}
Salida:
Recorrido después de la eliminación:
5 7 21