Estructuras_de_Datos/src/cl/cromer/estructuras/code/arbolGeneral/rotarIzquerda

93 lines
1.9 KiB
Plaintext

public void rotarIzquerda(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.getDerecha();
if (hijo == null) {
return;
}
// Rotar los valores.
ArbolNodo hijoIzquerda = hijo.getIzquerda();
if (arbol == padre) {
arbol = hijo;
}
else {
if (abuelo.getDerecha() == padre) {
abuelo.setDerecha(hijo);
}
else {
abuelo.setIzquerda(hijo);
}
}
hijo.setIzquerda(padre);
if (hijoIzquerda != null) {
padre.setDerecha(hijoIzquerda);
}
else {
padre.setDerecha(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;
}
}