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$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="dtjava" level="application" />
|
||||
</component>
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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,13 +207,29 @@ 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);*/
|
||||
|
||||
arbol.rotarIzquerda(Integer.valueOf(valorRotar.getText()));
|
||||
String tipo = getTipoString();
|
||||
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/rotarIzquerda")).useDelimiter("\\Z").next();
|
||||
codigoArbol.setText(codigoTexto);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotar el nodo a la izquerda.
|
||||
@ -225,13 +241,29 @@ 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);*/
|
||||
|
||||
arbol.rotarDerecha(Integer.valueOf(valorRotar.getText()));
|
||||
String tipo = getTipoString();
|
||||
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/rotarDerecha")).useDelimiter("\\Z").next();
|
||||
codigoArbol.setText(codigoTexto);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mostrar los elementos en orden de pre order.
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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()) {
|
||||
|
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">
|
||||
<Button text="%arbolRotarIzquerda" onAction="#botonRotarIzquerda"/>
|
||||
<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 fx:id="contenidoOrder" alignment="CENTER"/>
|
||||
<ScrollPane fitToHeight="true" fitToWidth="true" VBox.vgrow="ALWAYS">
|
||||
|
Loading…
Reference in New Issue
Block a user