Added code display to trees.
Fixed some bugs in trees.
This commit is contained in:
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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user