public int eliminar(String palabra) { int eliminados = 0; char c = palabra.charAt(0); // Primer carácter de la palabra if (izqNodo != null && izqNodo.caracter == c) // Sólo se continúa la eliminación si el primer carácter de la palabra es igual // al del nodo actual { if (palabra.length() > 1) { eliminados += izqNodo.eliminar(palabra.substring(1)); if (izqNodo.izqNodo == null && eliminados > 0 && izqNodo.elemento == null) { izqNodo = izqNodo.hermanoDerNodo; eliminados++; } } else { if (izqNodo.elemento != null) { izqNodo.elemento = null; if (izqNodo.izqNodo == null) { izqNodo = izqNodo.hermanoDerNodo; eliminados++; } } } } else if (izqNodo != null && izqNodo.caracter < c && izqNodo.hermanoDerNodo != null) // Buscar si la palabra existe en otro nodo a la derecha y eliminarla { // Buscar el nodo en el que se debe realizar la eliminación NodoPA<T> hermanoIzquierdo = izqNodo; NodoPA<T> nodo = izqNodo.hermanoDerNodo; while (nodo != null && nodo.caracter != c) { hermanoIzquierdo = nodo; nodo = nodo.hermanoDerNodo; } if (nodo != null && palabra.length() > 1) { eliminados = nodo.eliminar(palabra.substring(1)); if (nodo.izqNodo == null && eliminados > 0 && nodo.elemento == null) { hermanoIzquierdo.hermanoDerNodo = nodo.hermanoDerNodo; eliminados++; } } else if (nodo != null && nodo.elemento != null) { nodo.elemento = null; if (nodo.izqNodo == null) { hermanoIzquierdo.hermanoDerNodo = nodo.hermanoDerNodo; eliminados++; } } } return eliminados; }
public T eliminar(String palabra) { T elemento = buscar(palabra); int eliminados = elemento != null ? raiz.eliminar(palabra) : 0; peso -= eliminados; return elemento; }