Estructuras_de_Datos/src/cl/cromer/estructuras/Arbol.java

126 lines
2.3 KiB
Java

package cl.cromer.estructuras;
public class Arbol {
private ArbolNodo arbol;
private int size;
private int altura;
private int ancho;
public enum PrimerLado {
IZQUERDA,
DERECHA
}
public Arbol() {
this.arbol = null;
this.altura = 0;
this.ancho = 0;
}
public boolean insertar(int valor) {
if (this.arbol == null) {
arbol = new ArbolNodo(valor);
arbol.setY(1);
arbol.setX(1);
ancho = 1;
altura = 1;
return true;
}
else {
PrimerLado primerLado = null;
ArbolNodo nuevo = new ArbolNodo(valor);
ArbolNodo actual = arbol;
ArbolNodo padre;
while (true) {
padre = actual;
if (valor == actual.getValor()) {
// Ya existe.
return false;
}
else if (valor < actual.getValor()) {
// Izquerda
if (primerLado == null) {
primerLado = PrimerLado.IZQUERDA;
nuevo.setX(1);
}
else {
nuevo.setX(nuevo.getX() + 1);
}
nuevo.setY(nuevo.getY() + 1);
actual = actual.getIzquerda();
if (actual == null) {
padre.setIzquerda(nuevo);
size++;
if (primerLado == PrimerLado.IZQUERDA) {
ancho++;
}
setAltura(getAlturaRecursivo(arbol));
return true;
}
}
else {
// Derecha
if (primerLado == null) {
primerLado = PrimerLado.DERECHA;
nuevo.setX(1);
}
else {
nuevo.setX(nuevo.getX() + 1);
}
nuevo.setY(nuevo.getY() + 1);
actual = actual.getDerecha();
if (actual == null) {
padre.setDerecha(nuevo);
size++;
if (primerLado == PrimerLado.DERECHA) {
ancho++;
}
setAltura(getAlturaRecursivo(arbol));
return true;
}
}
}
}
}
public ArbolNodo getArbol() {
return arbol;
}
public int size() {
return size;
}
public int getAltura() {
return altura;
}
public void setAltura(int altura) {
this.altura = altura;
}
public int getAncho() {
return ancho;
}
public void setAncho(int ancho) {
this.ancho = ancho;
}
public int getAlturaRecursivo(ArbolNodo nodo) {
if (nodo == null) {
return 0;
}
else {
int alturaIzquerda = getAlturaRecursivo(nodo.getIzquerda());
int alturaDercha = getAlturaRecursivo(nodo.getDerecha());
if (alturaIzquerda > alturaDercha) {
return (alturaIzquerda + 1);
}
else {
return (alturaDercha + 1);
}
}
}
}