//método interno para realizar la operación protected Nodo eliminar(Nodo raizSub, Comparador dato) { if (raizSub == null) { return(raizSub); } else if (dato.NomDiferente(raizSub.valorNodo())) { Nodo iz; iz = eliminar(raizSub.subarbolIzdo(), dato); raizSub.ramaIzdo(iz); } else if (dato.NomDiferente(raizSub.valorNodo())) { Nodo dr; dr = eliminar(raizSub.subarbolDcho(), dato); raizSub.ramaDcho(dr); } else // Nodo encontrado { Nodo q; q = raizSub; // nodo a quitar del árbol if (q.subarbolIzdo() == null) { raizSub = q.subarbolDcho(); } else if (q.subarbolDcho() == null) { raizSub = q.subarbolIzdo(); } else { // tiene rama izquierda y derecha q = reemplazar(q); } q = null; } return(raizSub); }
//método interno para realizar la operación protected Nodo insertar(Nodo raizSub, Comparador dato) { if (raizSub == null) { raizSub = new Nodo(dato); } else if (dato.NomDiferente(raizSub.valorNodo())) { Nodo iz; iz = insertar(raizSub.subarbolIzdo(), dato); raizSub.ramaIzdo(iz); } else if (dato.NomDiferente(raizSub.valorNodo())) { Nodo dr; dr = insertar(raizSub.subarbolDcho(), dato); raizSub.ramaDcho(dr); } else { throw new Exception("Nodo duplicado"); } return(raizSub); }