Vous êtes sur la page 1sur 6

// MTODO Retira

public boolean Retira(NodoABB<T> R, T Infor) { // SE CREA EL MTODO BOOLEANO Retira QUE RECIBE UN NODO GENRICO DE
ARBOL DE BUSQUEDA BINARIA R Y UNA VARIABLE GENRICA Infor

boolean b=true; // SE CREA LA VARIABLE BOOLEANA b, SE MARCA CMO VERDADERA

NodoABB<T> Ant=null; // SE CREA EL NODO Ant, SE MARCA CMO NULO

String Llave=Infor.toString(); // SE CREA LA VARIABLE STRING Llave, SE LE ASIGNA EL VALOR STRING DE Infor

while (R != null) { // MIENTRAS QUE R NO SEA NULA, ENTRA AL CICLO

if ( Llave.compareTo( R.Info.toString() ) < 0 ) // SI Llave TIENE UN VALOR MENOR A R, ENTRA

Ant=R; // A Ant SE LE ASIGNA EL VALOR DE R, PARA QUE EL NODO ACTUAL SE CONVIERTA EN EL ANTERIOR

R=R.DameSubIzq(); // AL NODO R SE LE ASIGNA SU HIJO IZQUIERDO, PARA AVANZAR DE FORMA NO RECURSIVA EN EL


ARBOL

b=false; // b SE MARCA COMO FALSO

else // EN CASO DE QUE Llave NO TENGA UN VALOR MENOR A R, ENTRA

if ( Llave.compareTo( R.Info.toString() ) > 0 ) // SI Llave TIENE UN VALOR MAYOR A R, ENTRA

Ant=R; // SE DECLARA COMO NODO ANTERIOR AL NODO ACTUAL

R=R.DameSubDer(); // AL NODO R SE LE ASIGNA SU HIJO IZQUIERDO

b=true; // b SE MARCA COMO VERDADERO

}
else // EN CASO DE QUE Llave TENGA UN VALOR IGUAL A R, ENTRA

break; // SE TERMINA EL CICLO

if (R==null) // SI R ES NULO, ENTRA

return false; // SE RETORNA FALSO, SE TERMINA EL MTODO

if (R.DameSubIzq() != null && R.DameSubDer() != null) { // SI EL HIJO IZQUIERDO Y EL HIJO DERECHO DE R NO SON
NULOS, ENTRA

NodoABB<T> Temp=R.DameSubDer(); // SE CREA UN NODO TEMPORAL Temp CON EL VALOR DEL HIJO DERECHO DE R

NodoABB<T> Aux=R; // SE CREA UN NODO AUXILIAR Aux CON EL VALOR DEL NODO ACTUAL R

boolean RamaIzq=false; // SE CREA UNA VARIABLE BOOLEANA RamaIzq MARCADA COMO FALSA

while (Temp.DameSubIzq() != null) // MIENTRAS QUE EL HIJO IZQUIERDO DE Temp NO SEA NULO, ENTRA AL CICLO

Aux=Temp; // AL NODO Aux SE LE ASIGNA EL NODO Temp

Temp=Temp.DameSubIzq(); // AL NODO Temp SE LE ASIGNA SU HIJO IZQUIERDO

RamaIzq=true; // SE MARCA COMO VERDADERO A RamaIzq

Dr = R.Info; // A LA VARIABLE Dr (LTIMO VALOR ELIMINADO DEL ARBOL) SE LE ASIGNA LA VIARIABLE Info DEL NODO
R

R.Info = Temp.Info; // A LA VARIABLE Info DEL NODO R SE LE ASIGNA LA VARIABLE Info DEL NODO Temp

if (RamaIzq) // SI LA VARIABLE BOOLEANA RamaIzq ES VERDADERA, ENTRA

if (Temp.DameSubIzq() == null) // SI EL HIJO DERECHO DE Temp ES NULO, ENTRA


Aux.setSubIzq(Temp.DameSubDer()); // AL HIJO IZQUIERDO DE Aux SE LE ASIGNA EL HIJO DERECHO DE Temp

else // EN CASO DE QUE EL HIJO DERECHO DE Temp NO SEA NULO, ENTRA

Aux.setSubIzq(Temp.DameSubIzq()); // AL HIJO IZQUIERDO DE Aux SE LE ASIGNA EL HIJO IZQUIERDO DE Temp

else // EN CASO DE QUE RamaIzq SEA FALSA, ENTRA

Aux.setSubDer(Temp.DameSubDer()); // AL HIJO DERECHO DE Aux SE LE ASIGNA EL HIJO DERECHO DE Temp

return true; // SE RETORNA VERDADERO, SE TERMINA EL MTODO

else // EL HIJO IQUIERDO Y/O EL HIJO DERECHO DE R RESULTAN SER NULOS, ENTRA

if (R==Root) // SI EL NODO R ES IGUAL A LA RAZ PRINCIPAL DEL ARBOL (Root), ENTRA

Dr=R.Info; // A LA VARIABLE Dr (LTIMO VALOR ELIMINADO DEL ARBOL) SE LE ASIGNA LA VIARIABLE Info DEL
NODO R

if (R.DameSubIzq()==null) // SI EL HIJO IZQUIERDO DE R ES NULO, ENTRA

Root=R.DameSubDer(); // A LA RAZ PRINCIPAL DEL ARBOL (Root) SE LE ASIGNA EL HIJO DERECHO DE R

else // EN CASO DE EL HIJO IQUIERDO DE R NO SEA NULO, ENTRA

Root=R.DameSubIzq(); // A LA RAZ PRINCIPAL DEL ARBOL (Root) SE LE ASIGNA EL HIJO IZQUIERDO DE R

}
else // EN CASO DE QUE EL NODO R NO SEA IGUAL A LA RAZ PRINCIPAL DEL ARBOL (Root), ENTRA

Dr=R.Info; // A LA VARIABLE Dr (LTIMO VALOR ELIMINADO DEL ARBOL) SE LE ASIGNA LA VIARIABLE Info DEL NODO
R

if (R.DameSubIzq() == null) // SI EL HIJO IZQUIERDO DE R ES NULO, ENTRA

if (b) // SI LA VARIABLE BOOLEANA b EST MARCADA COMO VERDADERA, ENTRA

Ant.setSubDer(R.DameSubDer()); // AL HIJO DERECHO DE Ant SE LE ASIGNA EL HIJO DERECHO DE R

else // EN CASO DE QUE LA VARIABLE BOOLEANA b NO EST MARCADO COMO VERDADERO, ENTRA

Ant.setSubIzq(R.DameSubDer()); // AL HIJO IZQUIERDO DE Ant SE LE ASIGNA EL HIJO DERECHO DE R

else // EN CASO DE QUE EL HIJO IQUIERDO DE R NO SEA NULO, ENTRA

if (b) // SI LA VARIABLE BOOLEANA b EST MARCADA COMO VERDADERA, ENTRA

Ant.setSubDer(R.DameSubIzq()); // AL HIJO DERECHO DE Ant SE LE ASIGNA EL HIJO IQUIERDO DE R

else // EN CASO DE QUE LA VARIABLE BOOLEANA b NO EST MARCADO COMO VERDADERO, ENTRA

Ant.setSubIzq(R.DameSubIzq()); // AL HIJO IQUIERDO DE Ant SE LE ASIGNA EL HIJO IZQUIERDO DE R

return true; // SE RETORNA TRUE, SE TERMINA EL MTODO

}
// MTODO Busca
public boolean Busca(NodoABB<T> Raiz, T Dato){ // SE CREA EL MTODO Busca, QUE RECIBE UN NODO GENRICO DE ARBOL DE
BUSQUEDA BINARIA Raiz Y UNA VARIABLE GENRICA Dato

if(Raiz==null){ // SI EL NODO Raiz ES NULO, ENTRA

Dr=null; // SE MARCA NULA A LA VARIABLE Dr (LTIMO VALOR ELIMINADO DEL ARBOL)

return false; // SE RETORNA FALSO, SE TERMINA EL MTODO

if( Dato.toString().compareTo(Raiz.Info.toString())==0 ){ // SI EL VALOR STRING DE Dato ES IGUAL AL VALOR


STRING DE LA VARIABLE Info DEL NODO Raiz, ENTRA

Dr=Raiz.Info; // A LA VARIABLE Dr (LTIMO VALOR ELIMINADO DEL ARBOL) SE LE ASIGNA LA VARIABLE Info DEL NODO
Raiz

return true; // SE RETORNA VERDADERO, SE TERMINA EL MTODO

if( Dato.toString().compareTo(Raiz.Info.toString())>0 ){ // SI EL VALOR STRING DE Dato ES MAYOR AL VALOR


STRING DE LA VARIABLE Info DEL NODO Raiz, ENTRA

return Busca(Raiz.DameSubDer(),Dato); // SE RETORNA EL VALOR BOOLEANO QUE RETORNE LA LLAMADA RECURSIVA


SIMPLE AL MTODO Busca, AL CUAL SE LE ENVA EL HIJO DERECHO DEL NODO Raiz (QUIEN SE CONVERTIR EN LA RAIZ PRINCIPAL DE
FORMA TEMPORAL) Y LA VARIABLE GENRICA Dato

// EN CASO DE QUE EL VALOR STRING DE Dato SEA MENOR AL VALOR STRING DE LA VARIABLE Info DEL NODO Raiz, ENTRA LA
SIGUIENTE LINEA

return Busca(Raiz.DameSubIzq(),Dato); // SE RETORNA EL VALOR BOOLEANO QUE RETORNE LA LLAMADA RECURSIVA SIMPLE AL
MTODO Busca, AL CUAL SE LE ENVA EL HIJO IZQUIERDO DEL NODO Raiz (QUIEN SE CONVERTIR EN LA RAIZ PRINCIPAL DE FORMA
TEMPORAL) Y LA VARIABLE GENRICA Dato
}

Vous aimerez peut-être aussi