Added code display to trees.
Fixed some bugs in trees.
This commit is contained in:
parent
201ed14bdd
commit
4a7e1e17ab
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="JavaScriptLibraryMappings">
|
|
||||||
<file url="PROJECT" libraries="{dtjava}" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
@ -5,7 +5,7 @@
|
|||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" name="dtjava" level="application" />
|
<orderEntry type="library" name="dtjava" level="application" />
|
||||||
</component>
|
</component>
|
||||||
|
@ -54,7 +54,7 @@ public class Arbol {
|
|||||||
*/
|
*/
|
||||||
public boolean insertar(int valor) {
|
public boolean insertar(int valor) {
|
||||||
if (this.arbol == null) {
|
if (this.arbol == null) {
|
||||||
arbol = new ArbolNodo(valor, null);
|
arbol = new ArbolNodo(valor);
|
||||||
size++;
|
size++;
|
||||||
|
|
||||||
setAltura(calcularAltura(arbol));
|
setAltura(calcularAltura(arbol));
|
||||||
@ -69,7 +69,7 @@ public class Arbol {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ArbolNodo nuevo = new ArbolNodo(valor, null);
|
ArbolNodo nuevo = new ArbolNodo(valor);
|
||||||
ArbolNodo actual = arbol;
|
ArbolNodo actual = arbol;
|
||||||
ArbolNodo padre;
|
ArbolNodo padre;
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -128,6 +128,10 @@ public class Arbol {
|
|||||||
* @return boolean: Verdad si fue eliminado, falso si no existe.
|
* @return boolean: Verdad si fue eliminado, falso si no existe.
|
||||||
*/
|
*/
|
||||||
public boolean eliminar(int valor) {
|
public boolean eliminar(int valor) {
|
||||||
|
if (arbol == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ArbolNodo actual = arbol;
|
ArbolNodo actual = arbol;
|
||||||
ArbolNodo padre = arbol;
|
ArbolNodo padre = arbol;
|
||||||
boolean izquerda = true;
|
boolean izquerda = true;
|
||||||
@ -161,23 +165,29 @@ public class Arbol {
|
|||||||
else if(actual.getDerecha() == null) {
|
else if(actual.getDerecha() == null) {
|
||||||
if (actual == arbol) {
|
if (actual == arbol) {
|
||||||
arbol = actual.getIzquerda();
|
arbol = actual.getIzquerda();
|
||||||
|
arbol.setPadre(null);
|
||||||
}
|
}
|
||||||
else if (izquerda) {
|
else if (izquerda) {
|
||||||
padre.setIzquerda(actual.getIzquerda());
|
padre.setIzquerda(actual.getIzquerda());
|
||||||
|
actual.setPadre(padre);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
padre.setDerecha(actual.getIzquerda());
|
padre.setDerecha(actual.getIzquerda());
|
||||||
|
actual.setPadre(padre);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(actual.getIzquerda() == null) {
|
else if(actual.getIzquerda() == null) {
|
||||||
if (actual == arbol) {
|
if (actual == arbol) {
|
||||||
arbol = actual.getDerecha();
|
arbol = actual.getDerecha();
|
||||||
|
arbol.setPadre(null);
|
||||||
}
|
}
|
||||||
else if (izquerda) {
|
else if (izquerda) {
|
||||||
padre.setIzquerda(actual.getDerecha());
|
padre.setIzquerda(actual.getDerecha());
|
||||||
|
actual.setPadre(padre);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
padre.setDerecha(actual.getDerecha());
|
padre.setDerecha(actual.getDerecha());
|
||||||
|
actual.setPadre(padre);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -192,19 +202,24 @@ public class Arbol {
|
|||||||
if (successor != actual.getDerecha()) {
|
if (successor != actual.getDerecha()) {
|
||||||
successorParent.setIzquerda(successor.getDerecha());
|
successorParent.setIzquerda(successor.getDerecha());
|
||||||
successor.setDerecha(actual.getDerecha());
|
successor.setDerecha(actual.getDerecha());
|
||||||
|
actual.setPadre(successor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actual == arbol) {
|
if (actual == arbol) {
|
||||||
arbol = successor;
|
arbol = successor;
|
||||||
|
arbol.setPadre(null);
|
||||||
}
|
}
|
||||||
else if (izquerda) {
|
else if (izquerda) {
|
||||||
padre.setIzquerda(successor);
|
padre.setIzquerda(successor);
|
||||||
|
successor.setPadre(padre);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
padre.setDerecha(successor);
|
padre.setDerecha(successor);
|
||||||
|
successor.setPadre(padre);
|
||||||
}
|
}
|
||||||
|
|
||||||
successor.setIzquerda(actual.getIzquerda());
|
successor.setIzquerda(actual.getIzquerda());
|
||||||
|
actual.setPadre(successor);
|
||||||
}
|
}
|
||||||
size--;
|
size--;
|
||||||
setAltura(calcularAltura(arbol));
|
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
|
* @author Chris Cromer
|
||||||
*/
|
*/
|
||||||
|
@ -11,6 +11,7 @@ import java.net.URL;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Esta clase es para controlar todos la interfaz de Arbol.
|
* Esta clase es para controlar todos la interfaz de Arbol.
|
||||||
@ -63,6 +64,11 @@ public class ArbolController implements Initializable {
|
|||||||
*/
|
*/
|
||||||
private Arbol arbol;
|
private Arbol arbol;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* El tipo de arbol actual.
|
||||||
|
*/
|
||||||
|
Arbol.Tipos arbolTipo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inicializar todos los datos y dibujar las graficas.
|
* Inicializar todos los datos y dibujar las graficas.
|
||||||
*
|
*
|
||||||
@ -86,7 +92,7 @@ public class ArbolController implements Initializable {
|
|||||||
initializeArbol();
|
initializeArbol();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Random random = new Random();
|
Random random = new Random();
|
||||||
int maximo = 99;
|
int maximo = 99;
|
||||||
int minimo = 0;
|
int minimo = 0;
|
||||||
int rango = maximo - minimo + 1;
|
int rango = maximo - minimo + 1;
|
||||||
@ -102,15 +108,7 @@ public class ArbolController implements Initializable {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
||||||
arbol.insertar(10);
|
|
||||||
arbol.insertar(8);
|
|
||||||
arbol.insertar(9);
|
|
||||||
arbol.insertar(7);
|
|
||||||
arbol.insertar(12);
|
|
||||||
arbol.insertar(11);
|
|
||||||
arbol.insertar(13);
|
|
||||||
|
|
||||||
generarGrafico();
|
generarGrafico();
|
||||||
}
|
}
|
||||||
@ -139,8 +137,9 @@ public class ArbolController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mostrar el codigo
|
// Mostrar el codigo
|
||||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
String tipo = getTipoString();
|
||||||
codigoArray.setText(codigoTexto);*/
|
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("")) {
|
if (valorArbol.getText() != null && ! valorArbol.getText().trim().equals("")) {
|
||||||
try {
|
try {
|
||||||
@ -173,8 +172,9 @@ public class ArbolController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mostrar el codigo
|
// Mostrar el codigo
|
||||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
String tipo = getTipoString();
|
||||||
codigoArray.setText(codigoTexto);*/
|
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("")) {
|
if (valorArbol.getText() != null && ! valorArbol.getText().trim().equals("")) {
|
||||||
try {
|
try {
|
||||||
@ -207,13 +207,29 @@ public class ArbolController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mostrar el codigo
|
// Mostrar el codigo
|
||||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
String tipo = getTipoString();
|
||||||
codigoArray.setText(codigoTexto);*/
|
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()));
|
|
||||||
|
|
||||||
|
if (valorRotar.getText() != null && ! valorRotar.getText().trim().equals("")) {
|
||||||
|
try {
|
||||||
|
boolean exito = arbol.rotarIzquerda(Integer.valueOf(valorRotar.getText()));
|
||||||
|
if (exito) {
|
||||||
generarGrafico();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rotar el nodo a la izquerda.
|
* Rotar el nodo a la izquerda.
|
||||||
@ -225,13 +241,29 @@ public class ArbolController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mostrar el codigo
|
// Mostrar el codigo
|
||||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
String tipo = getTipoString();
|
||||||
codigoArray.setText(codigoTexto);*/
|
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()));
|
|
||||||
|
|
||||||
|
if (valorRotar.getText() != null && ! valorRotar.getText().trim().equals("")) {
|
||||||
|
try {
|
||||||
|
boolean exito = arbol.rotarDerecha(Integer.valueOf(valorRotar.getText()));
|
||||||
|
if (exito) {
|
||||||
generarGrafico();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mostrar los elementos en orden de pre order.
|
* Mostrar los elementos en orden de pre order.
|
||||||
@ -243,8 +275,9 @@ public class ArbolController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mostrar el codigo
|
// Mostrar el codigo
|
||||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
String tipo = getTipoString();
|
||||||
codigoArray.setText(codigoTexto);*/
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/preOrder")).useDelimiter("\\Z").next();
|
||||||
|
codigoArbol.setText(codigoTexto);
|
||||||
|
|
||||||
Colores colores = new Colores();
|
Colores colores = new Colores();
|
||||||
|
|
||||||
@ -267,8 +300,9 @@ public class ArbolController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mostrar el codigo
|
// Mostrar el codigo
|
||||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
String tipo = getTipoString();
|
||||||
codigoArray.setText(codigoTexto);*/
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/inOrder")).useDelimiter("\\Z").next();
|
||||||
|
codigoArbol.setText(codigoTexto);
|
||||||
|
|
||||||
Colores colores = new Colores();
|
Colores colores = new Colores();
|
||||||
|
|
||||||
@ -291,8 +325,9 @@ public class ArbolController implements Initializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mostrar el codigo
|
// Mostrar el codigo
|
||||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
String tipo = getTipoString();
|
||||||
codigoArray.setText(codigoTexto);*/
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/postOrder")).useDelimiter("\\Z").next();
|
||||||
|
codigoArbol.setText(codigoTexto);
|
||||||
|
|
||||||
Colores colores = new Colores();
|
Colores colores = new Colores();
|
||||||
|
|
||||||
@ -313,7 +348,24 @@ public class ArbolController implements Initializable {
|
|||||||
// Make the grid line present on the screen
|
// Make the grid line present on the screen
|
||||||
//contenidoArbol.setGridLinesVisible(true);
|
//contenidoArbol.setGridLinesVisible(true);
|
||||||
this.arbol = new Arbol();
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -35,10 +35,9 @@ final public class ArbolNodo {
|
|||||||
* Incilizar.
|
* Incilizar.
|
||||||
*
|
*
|
||||||
* @param valor int: El valor del nodo.
|
* @param valor int: El valor del nodo.
|
||||||
* @param padre ArbolNodo: Su nodo padre.
|
|
||||||
*/
|
*/
|
||||||
public ArbolNodo(int valor, ArbolNodo padre) {
|
public ArbolNodo(int valor) {
|
||||||
this.padre = padre;
|
this.padre = null;
|
||||||
this.izquerda = null;
|
this.izquerda = null;
|
||||||
this.derecha = null;
|
this.derecha = null;
|
||||||
this.valor = valor;
|
this.valor = valor;
|
||||||
|
@ -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
|
* @author Chris Cromer
|
||||||
*/
|
*/
|
||||||
|
@ -9,7 +9,7 @@ import java.util.*;
|
|||||||
*/
|
*/
|
||||||
public class Grafo {
|
public class Grafo {
|
||||||
/**
|
/**
|
||||||
* Esta clase contiene los tipos de grafo.
|
* Esta clase contiene los arbolTipo de grafo.
|
||||||
*
|
*
|
||||||
* @author Chris Cromer
|
* @author Chris Cromer
|
||||||
*/
|
*/
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cl.cromer.estructuras;
|
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
|
* @author Chris Cromer
|
||||||
*/
|
*/
|
||||||
|
@ -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
|
* @author Chris Cromer
|
||||||
*/
|
*/
|
||||||
|
@ -276,6 +276,11 @@ public class ListaEnlazdaController implements Initializable {
|
|||||||
nuevaLista();
|
nuevaLista();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Devolver la string de tipo de lista enlazada.
|
||||||
|
*
|
||||||
|
* @return String: El nombre del tipo de lista enlazada.
|
||||||
|
*/
|
||||||
private String getTipoString() {
|
private String getTipoString() {
|
||||||
String tipo;
|
String tipo;
|
||||||
switch (listaEnlazadaTipos.getTipo()) {
|
switch (listaEnlazadaTipos.getTipo()) {
|
||||||
|
117
src/cl/cromer/estructuras/code/arbolGeneral/eliminar
Normal file
117
src/cl/cromer/estructuras/code/arbolGeneral/eliminar
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
39
src/cl/cromer/estructuras/code/arbolGeneral/inOrder
Normal file
39
src/cl/cromer/estructuras/code/arbolGeneral/inOrder
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
69
src/cl/cromer/estructuras/code/arbolGeneral/insertar
Normal file
69
src/cl/cromer/estructuras/code/arbolGeneral/insertar
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
39
src/cl/cromer/estructuras/code/arbolGeneral/postOrder
Normal file
39
src/cl/cromer/estructuras/code/arbolGeneral/postOrder
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
39
src/cl/cromer/estructuras/code/arbolGeneral/preOrder
Normal file
39
src/cl/cromer/estructuras/code/arbolGeneral/preOrder
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
93
src/cl/cromer/estructuras/code/arbolGeneral/rotarDerecha
Normal file
93
src/cl/cromer/estructuras/code/arbolGeneral/rotarDerecha
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
93
src/cl/cromer/estructuras/code/arbolGeneral/rotarIzquerda
Normal file
93
src/cl/cromer/estructuras/code/arbolGeneral/rotarIzquerda
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -28,7 +28,7 @@
|
|||||||
<HBox alignment="CENTER" spacing="10">
|
<HBox alignment="CENTER" spacing="10">
|
||||||
<Button text="%arbolRotarIzquerda" onAction="#botonRotarIzquerda"/>
|
<Button text="%arbolRotarIzquerda" onAction="#botonRotarIzquerda"/>
|
||||||
<Button text="%arbolRotarDerecha" onAction="#botonRotarDerecha"/>
|
<Button text="%arbolRotarDerecha" onAction="#botonRotarDerecha"/>
|
||||||
<TextFieldLimited fx:id="valorRotar" maxLength="3" prefWidth="50" text="10"/>
|
<TextFieldLimited fx:id="valorRotar" maxLength="3" prefWidth="50" text=""/>
|
||||||
</HBox>
|
</HBox>
|
||||||
<HBox fx:id="contenidoOrder" alignment="CENTER"/>
|
<HBox fx:id="contenidoOrder" alignment="CENTER"/>
|
||||||
<ScrollPane fitToHeight="true" fitToWidth="true" VBox.vgrow="ALWAYS">
|
<ScrollPane fitToHeight="true" fitToWidth="true" VBox.vgrow="ALWAYS">
|
||||||
|
Loading…
Reference in New Issue
Block a user