93 lines
1.6 KiB
Plaintext
93 lines
1.6 KiB
Plaintext
public void rotarDerecha(int valor) {
|
|
if (arbol == null) {
|
|
// No hay nodos.
|
|
return;
|
|
}
|
|
|
|
ArbolNodo hijo = arbol;
|
|
ArbolNodo padre;
|
|
ArbolNodo abuelo;
|
|
while (true) {
|
|
abuelo = padre;
|
|
padre = hijo;
|
|
if (valor == hijo.getValor()) {
|
|
// Se encontró
|
|
hijo = padre.getIzquerda();
|
|
if (hijo == null) {
|
|
return false;
|
|
}
|
|
|
|
// Rotar los valores.
|
|
ArbolNodo hijoDerecha = hijo.getDerecha();
|
|
|
|
if (arbol == padre) {
|
|
arbol = hijo;
|
|
}
|
|
else {
|
|
if (abuelo.getDerecha() == padre) {
|
|
abuelo.setDerecha(hijo);
|
|
}
|
|
else {
|
|
abuelo.setIzquerda(hijo);
|
|
}
|
|
}
|
|
|
|
hijo.setDerecha(padre);
|
|
if (hijoDerecha != null) {
|
|
padre.setIzquerda(hijoDerecha);
|
|
}
|
|
else {
|
|
padre.setIzquerda(null);
|
|
}
|
|
return;
|
|
}
|
|
else if (valor < hijo.getValor()) {
|
|
// Izquerda
|
|
hijo = hijo.getIzquerda();
|
|
if (hijo == null) {
|
|
// No existe el nodo.
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
// Derecha
|
|
hijo = hijo.getDerecha();
|
|
if (hijo == null) {
|
|
// No existe el nodo.
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
final public class ArbolNodo {
|
|
private ArbolNodo izquerda;
|
|
private ArbolNodo derecha;
|
|
private int valor;
|
|
|
|
public ArbolNodo(int valor) {
|
|
this.izquerda = null;
|
|
this.derecha = null;
|
|
this.valor = valor;
|
|
}
|
|
|
|
public ArbolNodo getIzquerda() {
|
|
return izquerda;
|
|
}
|
|
|
|
public void setIzquerda(ArbolNodo izquerda) {
|
|
this.izquerda = izquerda;
|
|
}
|
|
|
|
public ArbolNodo getDerecha() {
|
|
return derecha;
|
|
}
|
|
|
|
public void setDerecha(ArbolNodo derecha) {
|
|
this.derecha = derecha;
|
|
}
|
|
|
|
public int getValor() {
|
|
return valor;
|
|
}
|
|
} |