I'm trying to make a method that removes a node from a binary search tree recursively but the code I have leaves everything as exactly the same.
public void borrar (Node nodo, int n){ // recibe el nodo raiz
if (nodo == null){ // si el nodo es null no hace nada mas
return;
}
else if (nodo.data==n){ // se mira si el dato del nodo es el que se quiere borrar
if (nodo.left == null && nodo.right == null){ // si el nodo es una hoja simplemente se elimina
nodo = null;
return;
}
else if (nodo.left != null && nodo.right == null){// si el nodo solo tiene un hijo izquierdo el nodo se hace igual a ese hijo izquierdo
nodo = nodo.left;
return;
}
else if (nodo.left == null && nodo.right != null){// si el nodo solo tiene un hijo derecho el nodo se hace igual a ese hijo derecho
nodo = nodo.right;
return;
}
else { // si el nodo tiene dos hijos, como el ultimo elemento de la raiz izquierda siempre es menor al primer de la raiz derecha
Node a = nodo.right; // el nodo pasa a ser la raiz izq y se pone esa raiz derecha como hija der de ese mismo nodo
nodo = nodo.left;
Node aux = nodo;
while (true){
if (nodo.right!=null){
aux = a.right;
}
else {
aux.right = a;
break;
}
}
return;
}
}
if (n<nodo.data){ // recursion si el numero buscado es menor al que esta en el nodo actual se invoca a si mismo con el hijo izq
borrar (nodo.left,n);
}
else {
borrar (nodo.right,n);// en cambio si es mayor o igual se invoca a si mismo con el hijo der
}
}