Added code display to trees.

Fixed some bugs in trees.
This commit is contained in:
Chris Cromer
2016-07-19 14:00:08 -04:00
parent 201ed14bdd
commit 4a7e1e17ab
18 changed files with 603 additions and 49 deletions

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}