diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
deleted file mode 100644
index 43589db..0000000
--- a/.idea/jsLibraryMappings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Estructuras de Datos.iml b/Estructuras de Datos.iml
index 8615095..e78cf63 100644
--- a/Estructuras de Datos.iml
+++ b/Estructuras de Datos.iml
@@ -5,7 +5,7 @@
-
+
diff --git a/src/cl/cromer/estructuras/Arbol.java b/src/cl/cromer/estructuras/Arbol.java
index 822bb88..239df65 100644
--- a/src/cl/cromer/estructuras/Arbol.java
+++ b/src/cl/cromer/estructuras/Arbol.java
@@ -54,7 +54,7 @@ public class Arbol {
*/
public boolean insertar(int valor) {
if (this.arbol == null) {
- arbol = new ArbolNodo(valor, null);
+ arbol = new ArbolNodo(valor);
size++;
setAltura(calcularAltura(arbol));
@@ -69,7 +69,7 @@ public class Arbol {
return true;
}
else {
- ArbolNodo nuevo = new ArbolNodo(valor, null);
+ ArbolNodo nuevo = new ArbolNodo(valor);
ArbolNodo actual = arbol;
ArbolNodo padre;
while (true) {
@@ -128,6 +128,10 @@ public class Arbol {
* @return boolean: Verdad si fue eliminado, falso si no existe.
*/
public boolean eliminar(int valor) {
+ if (arbol == null) {
+ return false;
+ }
+
ArbolNodo actual = arbol;
ArbolNodo padre = arbol;
boolean izquerda = true;
@@ -161,23 +165,29 @@ public class Arbol {
else if(actual.getDerecha() == null) {
if (actual == arbol) {
arbol = actual.getIzquerda();
+ arbol.setPadre(null);
}
else if (izquerda) {
padre.setIzquerda(actual.getIzquerda());
+ actual.setPadre(padre);
}
else {
padre.setDerecha(actual.getIzquerda());
+ actual.setPadre(padre);
}
}
else if(actual.getIzquerda() == null) {
if (actual == arbol) {
arbol = actual.getDerecha();
+ arbol.setPadre(null);
}
else if (izquerda) {
padre.setIzquerda(actual.getDerecha());
+ actual.setPadre(padre);
}
else {
padre.setDerecha(actual.getDerecha());
+ actual.setPadre(padre);
}
}
else {
@@ -192,19 +202,24 @@ public class Arbol {
if (successor != actual.getDerecha()) {
successorParent.setIzquerda(successor.getDerecha());
successor.setDerecha(actual.getDerecha());
+ actual.setPadre(successor);
}
if (actual == arbol) {
arbol = successor;
+ arbol.setPadre(null);
}
else if (izquerda) {
padre.setIzquerda(successor);
+ successor.setPadre(padre);
}
else {
padre.setDerecha(successor);
+ successor.setPadre(padre);
}
successor.setIzquerda(actual.getIzquerda());
+ actual.setPadre(successor);
}
size--;
setAltura(calcularAltura(arbol));
@@ -504,7 +519,7 @@ public class Arbol {
}
/**
- * Esta clase contiene los tipos de arboles.
+ * Esta clase contiene los arbolTipo de arboles.
*
* @author Chris Cromer
*/
diff --git a/src/cl/cromer/estructuras/ArbolController.java b/src/cl/cromer/estructuras/ArbolController.java
index c261694..5febe39 100644
--- a/src/cl/cromer/estructuras/ArbolController.java
+++ b/src/cl/cromer/estructuras/ArbolController.java
@@ -11,6 +11,7 @@ import java.net.URL;
import java.util.List;
import java.util.Random;
import java.util.ResourceBundle;
+import java.util.Scanner;
/**
* Esta clase es para controlar todos la interfaz de Arbol.
@@ -63,6 +64,11 @@ public class ArbolController implements Initializable {
*/
private Arbol arbol;
+ /**
+ * El tipo de arbol actual.
+ */
+ Arbol.Tipos arbolTipo;
+
/**
* Inicializar todos los datos y dibujar las graficas.
*
@@ -86,7 +92,7 @@ public class ArbolController implements Initializable {
initializeArbol();
}
- /*Random random = new Random();
+ Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
@@ -102,15 +108,7 @@ public class ArbolController implements Initializable {
break;
}
}
- }*/
-
- arbol.insertar(10);
- arbol.insertar(8);
- arbol.insertar(9);
- arbol.insertar(7);
- arbol.insertar(12);
- arbol.insertar(11);
- arbol.insertar(13);
+ }
generarGrafico();
}
@@ -139,8 +137,9 @@ public class ArbolController implements Initializable {
}
// Mostrar el codigo
- /*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
- codigoArray.setText(codigoTexto);*/
+ String tipo = getTipoString();
+ String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/insertar")).useDelimiter("\\Z").next();
+ codigoArbol.setText(codigoTexto);
if (valorArbol.getText() != null && ! valorArbol.getText().trim().equals("")) {
try {
@@ -173,8 +172,9 @@ public class ArbolController implements Initializable {
}
// Mostrar el codigo
- /*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
- codigoArray.setText(codigoTexto);*/
+ String tipo = getTipoString();
+ String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/eliminar")).useDelimiter("\\Z").next();
+ codigoArbol.setText(codigoTexto);
if (valorArbol.getText() != null && ! valorArbol.getText().trim().equals("")) {
try {
@@ -207,12 +207,28 @@ public class ArbolController implements Initializable {
}
// Mostrar el codigo
- /*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
- codigoArray.setText(codigoTexto);*/
+ String tipo = getTipoString();
+ String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/rotarIzquerda")).useDelimiter("\\Z").next();
+ codigoArbol.setText(codigoTexto);
- arbol.rotarIzquerda(Integer.valueOf(valorRotar.getText()));
-
- generarGrafico();
+ if (valorRotar.getText() != null && ! valorRotar.getText().trim().equals("")) {
+ try {
+ boolean exito = arbol.rotarIzquerda(Integer.valueOf(valorRotar.getText()));
+ if (exito) {
+ generarGrafico();
+ }
+ else {
+ Main.mostrarError(resourceBundle.getString("arbolNoEsta"), resourceBundle);
+ }
+ }
+ catch (NumberFormatException exception) {
+ // El error no es fatal, sigue
+ Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
+ }
+ }
+ else {
+ Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
+ }
}
/**
@@ -225,12 +241,28 @@ public class ArbolController implements Initializable {
}
// Mostrar el codigo
- /*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
- codigoArray.setText(codigoTexto);*/
+ String tipo = getTipoString();
+ String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/rotarDerecha")).useDelimiter("\\Z").next();
+ codigoArbol.setText(codigoTexto);
- arbol.rotarDerecha(Integer.valueOf(valorRotar.getText()));
-
- generarGrafico();
+ if (valorRotar.getText() != null && ! valorRotar.getText().trim().equals("")) {
+ try {
+ boolean exito = arbol.rotarDerecha(Integer.valueOf(valorRotar.getText()));
+ if (exito) {
+ generarGrafico();
+ }
+ else {
+ Main.mostrarError(resourceBundle.getString("arbolNoEsta"), resourceBundle);
+ }
+ }
+ catch (NumberFormatException exception) {
+ // El error no es fatal, sigue
+ Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
+ }
+ }
+ else {
+ Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
+ }
}
/**
@@ -243,8 +275,9 @@ public class ArbolController implements Initializable {
}
// Mostrar el codigo
- /*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
- codigoArray.setText(codigoTexto);*/
+ String tipo = getTipoString();
+ String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/preOrder")).useDelimiter("\\Z").next();
+ codigoArbol.setText(codigoTexto);
Colores colores = new Colores();
@@ -267,8 +300,9 @@ public class ArbolController implements Initializable {
}
// Mostrar el codigo
- /*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
- codigoArray.setText(codigoTexto);*/
+ String tipo = getTipoString();
+ String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/inOrder")).useDelimiter("\\Z").next();
+ codigoArbol.setText(codigoTexto);
Colores colores = new Colores();
@@ -291,8 +325,9 @@ public class ArbolController implements Initializable {
}
// Mostrar el codigo
- /*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
- codigoArray.setText(codigoTexto);*/
+ String tipo = getTipoString();
+ String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/postOrder")).useDelimiter("\\Z").next();
+ codigoArbol.setText(codigoTexto);
Colores colores = new Colores();
@@ -313,7 +348,24 @@ public class ArbolController implements Initializable {
// Make the grid line present on the screen
//contenidoArbol.setGridLinesVisible(true);
this.arbol = new Arbol();
- Arbol.Tipos tipos = (Arbol.Tipos) scene.getUserData();
+ arbolTipo = (Arbol.Tipos) scene.getUserData();
+ }
+
+ /**
+ * Devolver el tipo de arbol en un string.
+ *
+ * @return String: El tipo de arbol.
+ */
+ private String getTipoString() {
+ String tipo;
+ switch (arbolTipo.getTipo()) {
+ case Arbol.Tipos.GENERAL:
+ tipo = "General";
+ break;
+ default:
+ tipo = "General";
+ }
+ return tipo;
}
/**
diff --git a/src/cl/cromer/estructuras/ArbolNodo.java b/src/cl/cromer/estructuras/ArbolNodo.java
index 01fe60c..c0c1514 100644
--- a/src/cl/cromer/estructuras/ArbolNodo.java
+++ b/src/cl/cromer/estructuras/ArbolNodo.java
@@ -35,10 +35,9 @@ final public class ArbolNodo {
* Incilizar.
*
* @param valor int: El valor del nodo.
- * @param padre ArbolNodo: Su nodo padre.
*/
- public ArbolNodo(int valor, ArbolNodo padre) {
- this.padre = padre;
+ public ArbolNodo(int valor) {
+ this.padre = null;
this.izquerda = null;
this.derecha = null;
this.valor = valor;
diff --git a/src/cl/cromer/estructuras/Array.java b/src/cl/cromer/estructuras/Array.java
index 86391b2..0baa9da 100644
--- a/src/cl/cromer/estructuras/Array.java
+++ b/src/cl/cromer/estructuras/Array.java
@@ -529,7 +529,7 @@ final public class Array {
}
/**
- * Esta clase contiene los tipos de array.
+ * Esta clase contiene los arbolTipo de array.
*
* @author Chris Cromer
*/
diff --git a/src/cl/cromer/estructuras/Grafo.java b/src/cl/cromer/estructuras/Grafo.java
index 22a7c2d..67a0461 100644
--- a/src/cl/cromer/estructuras/Grafo.java
+++ b/src/cl/cromer/estructuras/Grafo.java
@@ -9,7 +9,7 @@ import java.util.*;
*/
public class Grafo {
/**
- * Esta clase contiene los tipos de grafo.
+ * Esta clase contiene los arbolTipo de grafo.
*
* @author Chris Cromer
*/
diff --git a/src/cl/cromer/estructuras/ListaEnlace.java b/src/cl/cromer/estructuras/ListaEnlace.java
index 17e1681..36e0f30 100644
--- a/src/cl/cromer/estructuras/ListaEnlace.java
+++ b/src/cl/cromer/estructuras/ListaEnlace.java
@@ -1,7 +1,7 @@
package cl.cromer.estructuras;
/**
- * Esta interfaz es para los 2 tipos de enlace, {@link ListaEnlaceNormal} y {@link ListaEnlaceCircular}.
+ * Esta interfaz es para los 2 arbolTipo de enlace, {@link ListaEnlaceNormal} y {@link ListaEnlaceCircular}.
*
* @author Chris Cromer
*/
diff --git a/src/cl/cromer/estructuras/ListaEnlazada.java b/src/cl/cromer/estructuras/ListaEnlazada.java
index 76be495..7941689 100644
--- a/src/cl/cromer/estructuras/ListaEnlazada.java
+++ b/src/cl/cromer/estructuras/ListaEnlazada.java
@@ -180,7 +180,7 @@ final public class ListaEnlazada {
}
/**
- * Esta clase contiene los tipos de listas enlazadas.
+ * Esta clase contiene los arbolTipo de listas enlazadas.
*
* @author Chris Cromer
*/
diff --git a/src/cl/cromer/estructuras/ListaEnlazdaController.java b/src/cl/cromer/estructuras/ListaEnlazdaController.java
index 9411047..4d94e4e 100644
--- a/src/cl/cromer/estructuras/ListaEnlazdaController.java
+++ b/src/cl/cromer/estructuras/ListaEnlazdaController.java
@@ -276,6 +276,11 @@ public class ListaEnlazdaController implements Initializable {
nuevaLista();
}
+ /**
+ * Devolver la string de tipo de lista enlazada.
+ *
+ * @return String: El nombre del tipo de lista enlazada.
+ */
private String getTipoString() {
String tipo;
switch (listaEnlazadaTipos.getTipo()) {
diff --git a/src/cl/cromer/estructuras/code/arbolGeneral/eliminar b/src/cl/cromer/estructuras/code/arbolGeneral/eliminar
new file mode 100644
index 0000000..dae17c8
--- /dev/null
+++ b/src/cl/cromer/estructuras/code/arbolGeneral/eliminar
@@ -0,0 +1,117 @@
+public void eliminar(int valor) {
+ if (arbol == null) {
+ // No hay nodos.
+ return;
+ }
+
+ ArbolNodo actual = arbol;
+ ArbolNodo padre = arbol;
+ boolean izquerda = true;
+
+ while (actual.getValor() != valor) {
+ padre = actual;
+ if (valor < actual.getValor()) {
+ izquerda = true;
+ actual = actual.getIzquerda();
+ }
+ else {
+ izquerda = false;
+ actual = actual.getDerecha();
+ }
+ if (actual == null) {
+ return;
+ }
+ }
+
+ if (actual.getIzquerda() == null && actual.getDerecha() == null) {
+ if (actual == arbol) {
+ arbol = null;
+ }
+ else if (izquerda) {
+ padre.setIzquerda(null);
+ }
+ else {
+ padre.setDerecha(null);
+ }
+ }
+ else if(actual.getDerecha() == null) {
+ if (actual == arbol) {
+ arbol = actual.getIzquerda();
+ }
+ else if (izquerda) {
+ padre.setIzquerda(actual.getIzquerda());
+ }
+ else {
+ padre.setDerecha(actual.getIzquerda());
+ }
+ }
+ else if(actual.getIzquerda() == null) {
+ if (actual == arbol) {
+ arbol = actual.getDerecha();
+ }
+ else if (izquerda) {
+ padre.setIzquerda(actual.getDerecha());
+ }
+ else {
+ padre.setDerecha(actual.getDerecha());
+ }
+ }
+ else {
+ ArbolNodo successorParent = actual;
+ ArbolNodo successor = actual;
+ ArbolNodo current = actual.getDerecha();
+ while (current != null) {
+ successorParent = successor;
+ successor = current;
+ current = current.getIzquerda();
+ }
+ if (successor != actual.getDerecha()) {
+ successorParent.setIzquerda(successor.getDerecha());
+ successor.setDerecha(actual.getDerecha());
+ }
+
+ if (actual == arbol) {
+ arbol = successor;
+ }
+ else if (izquerda) {
+ padre.setIzquerda(successor);
+ }
+ else {
+ padre.setDerecha(successor);
+ }
+
+ successor.setIzquerda(actual.getIzquerda());
+ }
+}
+
+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;
+ }
+}
\ No newline at end of file
diff --git a/src/cl/cromer/estructuras/code/arbolGeneral/inOrder b/src/cl/cromer/estructuras/code/arbolGeneral/inOrder
new file mode 100644
index 0000000..5fc5456
--- /dev/null
+++ b/src/cl/cromer/estructuras/code/arbolGeneral/inOrder
@@ -0,0 +1,39 @@
+public void inOrder(ArbolNodo nodo) {
+ if (nodo != null) {
+ inOrder(nodo.getIzquerda());
+ System.out.println(nodo.getValor());
+ inOrder(nodo.getDerecha());
+ }
+}
+
+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;
+ }
+}
\ No newline at end of file
diff --git a/src/cl/cromer/estructuras/code/arbolGeneral/insertar b/src/cl/cromer/estructuras/code/arbolGeneral/insertar
new file mode 100644
index 0000000..c6f6a2e
--- /dev/null
+++ b/src/cl/cromer/estructuras/code/arbolGeneral/insertar
@@ -0,0 +1,69 @@
+public void insertar(int valor) {
+ if (this.arbol == null) {
+ // Crear la raiz.
+ arbol = new ArbolNodo(valor);
+ return;
+ }
+ else {
+ ArbolNodo nuevo = new ArbolNodo(valor);
+ ArbolNodo actual = arbol;
+ ArbolNodo padre;
+ while (true) {
+ padre = actual;
+ if (valor == actual.getValor()) {
+ // Ya existe.
+ return;
+ }
+ else if (valor < actual.getValor()) {
+ // Izquerda
+ actual = actual.getIzquerda();
+ if (actual == null) {
+ // EncontrĂ³ un null, insertar el nodo nuevo.
+ padre.setIzquerda(nuevo);
+ return;
+ }
+ }
+ else {
+ // Derecha
+ actual = actual.getDerecha();
+ if (actual == null) {
+ // EncontrĂ³ un null, insertar el nodo nuevo.
+ padre.setDerecha(nuevo);
+ 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;
+ }
+}
\ No newline at end of file
diff --git a/src/cl/cromer/estructuras/code/arbolGeneral/postOrder b/src/cl/cromer/estructuras/code/arbolGeneral/postOrder
new file mode 100644
index 0000000..b0a46bb
--- /dev/null
+++ b/src/cl/cromer/estructuras/code/arbolGeneral/postOrder
@@ -0,0 +1,39 @@
+public void postOrder(ArbolNodo nodo) {
+ if (nodo != null) {
+ postOrder(nodo.getIzquerda());
+ postOrder(nodo.getDerecha());
+ System.out.println(nodo.getValor());
+ }
+}
+
+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;
+ }
+}
\ No newline at end of file
diff --git a/src/cl/cromer/estructuras/code/arbolGeneral/preOrder b/src/cl/cromer/estructuras/code/arbolGeneral/preOrder
new file mode 100644
index 0000000..402dbc3
--- /dev/null
+++ b/src/cl/cromer/estructuras/code/arbolGeneral/preOrder
@@ -0,0 +1,39 @@
+public void preOrder(ArbolNodo nodo) {
+ if (nodo != null) {
+ System.out.println(nodo.getValor());
+ preOrder(nodo.getIzquerda());
+ preOrder(nodo.getDerecha());
+ }
+}
+
+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;
+ }
+}
\ No newline at end of file
diff --git a/src/cl/cromer/estructuras/code/arbolGeneral/rotarDerecha b/src/cl/cromer/estructuras/code/arbolGeneral/rotarDerecha
new file mode 100644
index 0000000..72b1110
--- /dev/null
+++ b/src/cl/cromer/estructuras/code/arbolGeneral/rotarDerecha
@@ -0,0 +1,93 @@
+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;
+ }
+}
\ No newline at end of file
diff --git a/src/cl/cromer/estructuras/code/arbolGeneral/rotarIzquerda b/src/cl/cromer/estructuras/code/arbolGeneral/rotarIzquerda
new file mode 100644
index 0000000..c93584e
--- /dev/null
+++ b/src/cl/cromer/estructuras/code/arbolGeneral/rotarIzquerda
@@ -0,0 +1,93 @@
+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;
+ }
+}
\ No newline at end of file
diff --git a/src/cl/cromer/estructuras/fxml/arbol.fxml b/src/cl/cromer/estructuras/fxml/arbol.fxml
index 6d7f8ae..a129511 100644
--- a/src/cl/cromer/estructuras/fxml/arbol.fxml
+++ b/src/cl/cromer/estructuras/fxml/arbol.fxml
@@ -28,7 +28,7 @@
-
+