¿Qué está mal con mi método insert() en mi implementación de Árbol de Búsqueda Binaria?
Intenté crear un método recursivo para insertar un elemento en mi árbol de búsqueda binario; sin embargo, no puedo encontrar el error en mi código (sospecho que tiene algo que ver con las referencias).
public class BST<E extends Comparable<E>> {
private class BSTNode implements Comparable<BSTNode> {
public E data;
public BSTNode left;
public BSTNode right;
public BSTNode(E data) {
this.data = data;
}
@Override
public int compareTo(BSTNode o) {
return this.data.compareTo(o.data);
}
}
public BSTNode root;
public void insert(E data) {
insertRec(root, new BSTNode(data));
}
private void insertRec(BSTNode current, BSTNode newNode) {
if (current == null) {
current = newNode;
return;
}
if (current.compareTo(newNode) > 0) {
insertRec(current.right, newNode);
}
else if (current.compareTo(newNode) < 0) {
insertRec(current.left, newNode);
}
}
}
davy.ai
El problema con el método
insertRec
en este código es que las asignaciones realizadas acurrent
no actualizan la referencia al nodo padre fuera del método. Cuandocurrent
se establece ennull
o ennewNode
, solo cambia la referencia de parámetro dentro del alcance del método, no la referencia mantenida por el nodo padre o cualquier otra referencia a él.Para solucionar este problema, el método
insertRec
debe devolver el nodo actualizado después de la llamada recursiva, para que el nodo padre pueda actualizar su referencia a ese nodo. El método actualizadoinsertRec
podría verse así:En este método actualizado, la referencia del nodo padre se actualiza con el valor devuelto después de cada llamada recursiva. El nodo de inicio se devuelve cuando no es necesario realizar más cambios.