2016-07-04 11:38:26 -04:00
|
|
|
package cl.cromer.estructuras;
|
|
|
|
|
|
|
|
import javafx.fxml.FXML;
|
|
|
|
import javafx.fxml.Initializable;
|
|
|
|
import javafx.scene.Scene;
|
|
|
|
import javafx.scene.layout.GridPane;
|
2016-07-16 16:28:25 -04:00
|
|
|
import javafx.scene.layout.HBox;
|
2016-07-04 11:38:26 -04:00
|
|
|
import javafx.scene.text.Text;
|
|
|
|
|
|
|
|
import java.net.URL;
|
2016-07-05 10:03:13 -04:00
|
|
|
import java.util.List;
|
2016-07-16 16:28:25 -04:00
|
|
|
import java.util.Random;
|
2016-07-04 11:38:26 -04:00
|
|
|
import java.util.ResourceBundle;
|
2016-07-19 14:00:08 -04:00
|
|
|
import java.util.Scanner;
|
2016-07-04 11:38:26 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Esta clase es para controlar todos la interfaz de Arbol.
|
|
|
|
*
|
|
|
|
* @author Chris Cromer
|
|
|
|
*/
|
|
|
|
public class ArbolController implements Initializable {
|
|
|
|
/**
|
|
|
|
* La caja para ingresar textos.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
private TextFieldLimited valorArbol;
|
|
|
|
|
2016-07-16 16:28:25 -04:00
|
|
|
/**
|
|
|
|
* El nodo a rotar.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
private TextFieldLimited valorRotar;
|
|
|
|
|
2016-07-04 11:38:26 -04:00
|
|
|
/**
|
|
|
|
* Donde poner el contenido de array.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
private GridPane contenidoArbol;
|
|
|
|
|
2016-07-16 16:28:25 -04:00
|
|
|
/**
|
|
|
|
* El contendido del orden.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
private HBox contenidoOrder;
|
|
|
|
|
2016-07-04 11:38:26 -04:00
|
|
|
/**
|
|
|
|
* Donde va el codigo a mostrar a la pantalla.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
private Text codigoArbol;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* La escena donde está cosas graficas.
|
|
|
|
*/
|
|
|
|
private Scene scene;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Donde está guardado los idiomas.
|
|
|
|
*/
|
|
|
|
private ResourceBundle resourceBundle;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* El arbol usado en la aplicación.
|
|
|
|
*/
|
|
|
|
private Arbol arbol;
|
|
|
|
|
2016-07-19 14:00:08 -04:00
|
|
|
/**
|
|
|
|
* El tipo de arbol actual.
|
|
|
|
*/
|
|
|
|
Arbol.Tipos arbolTipo;
|
|
|
|
|
2016-07-04 11:38:26 -04:00
|
|
|
/**
|
|
|
|
* Inicializar todos los datos y dibujar las graficas.
|
|
|
|
*
|
|
|
|
* @param location URL: El URL de fxml en uso.
|
|
|
|
* @param resourceBundle ResourceBundle: Tiene datos de idioma.
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public void initialize(URL location, ResourceBundle resourceBundle) {
|
|
|
|
this.resourceBundle = resourceBundle;
|
|
|
|
|
|
|
|
arbol = null;
|
|
|
|
scene = null;
|
2016-07-16 16:28:25 -04:00
|
|
|
}
|
2016-07-04 11:38:26 -04:00
|
|
|
|
2016-07-16 16:28:25 -04:00
|
|
|
/**
|
|
|
|
* Llenar un arbol al azar.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonLlenar() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
2016-07-05 10:03:13 -04:00
|
|
|
|
2016-07-19 14:00:08 -04:00
|
|
|
Random random = new Random();
|
2016-07-16 16:28:25 -04:00
|
|
|
int maximo = 99;
|
|
|
|
int minimo = 0;
|
|
|
|
int rango = maximo - minimo + 1;
|
2016-07-05 10:03:13 -04:00
|
|
|
|
2016-07-16 16:28:25 -04:00
|
|
|
for (int i = 0; i < 5; i++) {
|
|
|
|
if (arbol.size() >= 5) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
int numero = random.nextInt(rango) + minimo;
|
|
|
|
while (!arbol.insertar(numero)) {
|
|
|
|
numero = random.nextInt(rango) + minimo;
|
|
|
|
if (arbol.size() >= 5) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2016-07-19 14:00:08 -04:00
|
|
|
}
|
2016-07-16 16:28:25 -04:00
|
|
|
|
|
|
|
generarGrafico();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Vaciar el arbol de todos los valores.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonVaciar() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
arbol = new Arbol();
|
|
|
|
generarGrafico();
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Insertar un valor al array y mostrar el codigo en la pantalla.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonInsertar() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mostrar el codigo
|
2016-07-19 14:00:08 -04:00
|
|
|
String tipo = getTipoString();
|
|
|
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
|
|
|
codigoArbol.setText(codigoTexto);
|
2016-07-04 11:38:26 -04:00
|
|
|
|
2016-07-11 01:12:51 -04:00
|
|
|
if (valorArbol.getText() != null && ! valorArbol.getText().trim().equals("")) {
|
2016-07-04 11:38:26 -04:00
|
|
|
try {
|
|
|
|
boolean exito = arbol.insertar(Integer.valueOf(valorArbol.getText()));
|
|
|
|
if (exito) {
|
|
|
|
valorArbol.setText("");
|
|
|
|
generarGrafico();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
Main.mostrarError(resourceBundle.getString("arbolValorExiste"), resourceBundle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (NumberFormatException exception) {
|
|
|
|
// El error no es fatal, sigue
|
|
|
|
Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
|
2016-07-11 01:12:51 -04:00
|
|
|
}
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|
|
|
|
|
2016-07-11 01:12:51 -04:00
|
|
|
/**
|
|
|
|
* Eliminar un valor del arbol y mostrar el codigo en la pantalla.
|
|
|
|
*/
|
2016-07-16 16:28:25 -04:00
|
|
|
@FXML
|
2016-07-11 01:12:51 -04:00
|
|
|
protected void botonEliminar() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mostrar el codigo
|
2016-07-19 14:00:08 -04:00
|
|
|
String tipo = getTipoString();
|
|
|
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/eliminar")).useDelimiter("\\Z").next();
|
|
|
|
codigoArbol.setText(codigoTexto);
|
2016-07-11 01:12:51 -04:00
|
|
|
|
|
|
|
if (valorArbol.getText() != null && ! valorArbol.getText().trim().equals("")) {
|
|
|
|
try {
|
|
|
|
boolean exito = arbol.eliminar(Integer.valueOf(valorArbol.getText()));
|
|
|
|
if (exito) {
|
|
|
|
valorArbol.setText("");
|
|
|
|
generarGrafico();
|
|
|
|
}
|
|
|
|
else {
|
2016-07-16 16:28:25 -04:00
|
|
|
Main.mostrarError(resourceBundle.getString("arbolNoEsta"), resourceBundle);
|
2016-07-11 01:12:51 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (NumberFormatException exception) {
|
|
|
|
// El error no es fatal, sigue
|
|
|
|
Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
Main.mostrarError(resourceBundle.getString("arbolNoValor"), resourceBundle);
|
|
|
|
}
|
2016-07-16 16:28:25 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Rotar el nodo a la izquerda.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonRotarIzquerda() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mostrar el codigo
|
2016-07-19 14:00:08 -04:00
|
|
|
String tipo = getTipoString();
|
|
|
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/rotarIzquerda")).useDelimiter("\\Z").next();
|
|
|
|
codigoArbol.setText(codigoTexto);
|
2016-07-16 16:28:25 -04:00
|
|
|
|
2016-07-19 14:00:08 -04:00
|
|
|
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);
|
|
|
|
}
|
2016-07-16 16:28:25 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Rotar el nodo a la izquerda.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonRotarDerecha() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mostrar el codigo
|
2016-07-19 14:00:08 -04:00
|
|
|
String tipo = getTipoString();
|
|
|
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/rotarDerecha")).useDelimiter("\\Z").next();
|
|
|
|
codigoArbol.setText(codigoTexto);
|
2016-07-16 16:28:25 -04:00
|
|
|
|
2016-07-19 14:00:08 -04:00
|
|
|
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);
|
|
|
|
}
|
2016-07-16 16:28:25 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mostrar los elementos en orden de pre order.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonPreOrder() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mostrar el codigo
|
2016-07-19 14:00:08 -04:00
|
|
|
String tipo = getTipoString();
|
|
|
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/preOrder")).useDelimiter("\\Z").next();
|
|
|
|
codigoArbol.setText(codigoTexto);
|
2016-07-16 16:28:25 -04:00
|
|
|
|
|
|
|
Colores colores = new Colores();
|
|
|
|
|
|
|
|
contenidoOrder.getChildren().clear();
|
|
|
|
|
|
|
|
List<ArbolNodo> orden = arbol.preOrder();
|
|
|
|
for (ArbolNodo anOrden : orden) {
|
|
|
|
contenidoOrder.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(anOrden.getValor()), String.valueOf(anOrden.getValor())));
|
|
|
|
colores.siguinteColor();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mostrar los elementos en orden de in order.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonInOrder() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mostrar el codigo
|
2016-07-19 14:00:08 -04:00
|
|
|
String tipo = getTipoString();
|
|
|
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/inOrder")).useDelimiter("\\Z").next();
|
|
|
|
codigoArbol.setText(codigoTexto);
|
2016-07-16 16:28:25 -04:00
|
|
|
|
|
|
|
Colores colores = new Colores();
|
|
|
|
|
|
|
|
contenidoOrder.getChildren().clear();
|
|
|
|
|
|
|
|
List<ArbolNodo> orden = arbol.inOrder();
|
|
|
|
for (ArbolNodo anOrden : orden) {
|
|
|
|
contenidoOrder.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(anOrden.getValor()), String.valueOf(anOrden.getValor())));
|
|
|
|
colores.siguinteColor();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mostrar los elementos en orden de post order.
|
|
|
|
*/
|
|
|
|
@FXML
|
|
|
|
protected void botonPostOrder() {
|
|
|
|
if (scene == null) {
|
|
|
|
initializeArbol();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mostrar el codigo
|
2016-07-19 14:00:08 -04:00
|
|
|
String tipo = getTipoString();
|
|
|
|
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/arbol" + tipo + "/postOrder")).useDelimiter("\\Z").next();
|
|
|
|
codigoArbol.setText(codigoTexto);
|
2016-07-16 16:28:25 -04:00
|
|
|
|
|
|
|
Colores colores = new Colores();
|
|
|
|
|
|
|
|
contenidoOrder.getChildren().clear();
|
|
|
|
|
|
|
|
List<ArbolNodo> orden = arbol.postOrder();
|
|
|
|
for (ArbolNodo anOrden : orden) {
|
|
|
|
contenidoOrder.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(anOrden.getValor()), String.valueOf(anOrden.getValor())));
|
|
|
|
colores.siguinteColor();
|
|
|
|
}
|
|
|
|
}
|
2016-07-11 01:12:51 -04:00
|
|
|
|
2016-07-04 11:38:26 -04:00
|
|
|
/**
|
|
|
|
* Crear un arbol nuevo.
|
|
|
|
*/
|
|
|
|
private void initializeArbol() {
|
|
|
|
scene = contenidoArbol.getScene();
|
2016-07-16 16:28:25 -04:00
|
|
|
// Make the grid line present on the screen
|
2016-07-11 01:12:51 -04:00
|
|
|
//contenidoArbol.setGridLinesVisible(true);
|
2016-07-16 16:28:25 -04:00
|
|
|
this.arbol = new Arbol();
|
2016-07-19 14:00:08 -04:00
|
|
|
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;
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|
|
|
|
|
2016-07-16 16:28:25 -04:00
|
|
|
/**
|
|
|
|
* Este metodo generará el grafico de arbol en la ventana.
|
|
|
|
*/
|
2016-07-05 10:03:13 -04:00
|
|
|
private void generarGrafico() {
|
2016-07-16 16:28:25 -04:00
|
|
|
contenidoOrder.getChildren().clear();
|
|
|
|
|
|
|
|
Colores colores = new Colores();
|
|
|
|
|
|
|
|
for (int i = 0; i < arbol.size(); i++) {
|
|
|
|
contenidoOrder.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i)));
|
|
|
|
colores.siguinteColor();
|
|
|
|
}
|
2016-07-11 01:12:51 -04:00
|
|
|
|
2016-07-16 16:28:25 -04:00
|
|
|
// Node 0 contains the grid lines, get them and restore them in the new drawing.
|
2016-07-11 01:12:51 -04:00
|
|
|
//Node node = contenidoArbol.getChildren().get(0);
|
2016-07-05 10:03:13 -04:00
|
|
|
contenidoArbol.getChildren().clear();
|
2016-07-11 01:12:51 -04:00
|
|
|
//contenidoArbol.getChildren().add(0, node);
|
2016-07-05 10:03:13 -04:00
|
|
|
|
|
|
|
List<List<ArbolNodo>> niveles = arbol.getNiveles();
|
|
|
|
|
2016-07-07 14:23:04 -04:00
|
|
|
int altura = arbol.getAltura() - 1;
|
2016-07-10 15:31:15 -04:00
|
|
|
// Thank you Claudio Gutiérrez
|
2016-07-07 14:23:04 -04:00
|
|
|
int ancho = (int) Math.pow(2, altura) + (int) ((Math.pow(2, altura)) - 1);
|
|
|
|
|
|
|
|
Text text;
|
2016-07-16 16:28:25 -04:00
|
|
|
if (altura == 0) {
|
|
|
|
contenidoArbol.addColumn(0);
|
|
|
|
text = new Text();
|
|
|
|
text.setText(" ");
|
|
|
|
text.setId(0 + "_" + 0);
|
|
|
|
contenidoArbol.add(text, 0, 0);
|
|
|
|
}
|
2016-07-07 14:23:04 -04:00
|
|
|
for (int i = 0; i < altura; i++) {
|
|
|
|
contenidoArbol.addRow(i);
|
|
|
|
for (int j = 0; j < ancho; j++) {
|
|
|
|
contenidoArbol.addColumn(j);
|
|
|
|
text = new Text();
|
|
|
|
text.setText(" ");
|
|
|
|
text.setId(j + "_" + i);
|
|
|
|
contenidoArbol.add(text, j, i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-16 16:28:25 -04:00
|
|
|
colores = new Colores();
|
2016-07-11 01:12:51 -04:00
|
|
|
int k;
|
|
|
|
int l = 0;
|
2016-07-05 10:03:13 -04:00
|
|
|
for (int i = niveles.size() - 1; i >= 0 ; i--) {
|
2016-07-11 01:12:51 -04:00
|
|
|
k = l;
|
2016-07-05 10:03:13 -04:00
|
|
|
for (int j = 0; j < niveles.get(i).size(); j++) {
|
|
|
|
if (niveles.get(i).get(j) != null) {
|
2016-07-11 01:12:51 -04:00
|
|
|
niveles.get(i).get(j).setX(k);
|
|
|
|
if (niveles.get(i).get(j).getIzquerda() != null) {
|
|
|
|
k = niveles.get(i).get(j).getIzquerda().getX() + 1;
|
|
|
|
niveles.get(i).get(j).setX(k);
|
|
|
|
contenidoArbol.add(Grafico.crearCirculo(colores, j + "_" + i), niveles.get(i).get(j).getIzquerda().getX() + 1, i);
|
|
|
|
}
|
|
|
|
else if (niveles.get(i).get(j).getDerecha() != null) {
|
|
|
|
k = niveles.get(i).get(j).getDerecha().getX() - 1;
|
|
|
|
niveles.get(i).get(j).setX(k);
|
|
|
|
contenidoArbol.add(Grafico.crearCirculo(colores, j + "_" + i), niveles.get(i).get(j).getDerecha().getX() - 1, i);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
contenidoArbol.add(Grafico.crearCirculo(colores, j + "_" + i), k, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check the right for visual conflicts
|
|
|
|
if (niveles.get(i).get(j).getDerecha() != null && niveles.get(i).get(j).getDerecha().getX() > k + 1) {
|
|
|
|
int parentX = niveles.get(i).get(j).getX();
|
|
|
|
int childX = niveles.get(i).get(j).getDerecha().getX();
|
|
|
|
for (int m = parentX + 1; m < childX; m++) {
|
|
|
|
contenidoArbol.add(Grafico.crearLineaHorizontal(), m, i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-04 12:37:35 -04:00
|
|
|
colores.siguinteColor();
|
2016-07-11 01:12:51 -04:00
|
|
|
text = (Text) scene.lookup("#texto_" + j + "_" + i);
|
|
|
|
text.setText(String.valueOf(niveles.get(i).get(j).getValor()));
|
2016-07-04 11:38:26 -04:00
|
|
|
|
2016-07-11 01:12:51 -04:00
|
|
|
if (i != 0) {
|
|
|
|
if (niveles.get(i).get(j).getPadre().getIzquerda() == niveles.get(i).get(j)) {
|
|
|
|
// El hijo está a la izquerda
|
|
|
|
contenidoArbol.add(Grafico.crearEsquinaDerecha(), k, i - 1);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// El hijo está a la derecha
|
|
|
|
contenidoArbol.add(Grafico.crearEsquinaIzquerda(), k, i - 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
k++;
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|
|
|
|
else {
|
2016-07-11 01:12:51 -04:00
|
|
|
k++;
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|
2016-07-11 01:12:51 -04:00
|
|
|
k++;
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|
2016-07-11 01:12:51 -04:00
|
|
|
l++;
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|
2016-07-11 01:12:51 -04:00
|
|
|
}
|
2016-07-04 11:38:26 -04:00
|
|
|
}
|