diff --git a/fonte/u08 Balanceamento de árvores/java/alvinegra/Alvinegra.java b/fonte/u08 Balanceamento de árvores/java/alvinegra/Alvinegra.java
index 491512c..a41f465 100644
--- a/fonte/u08 Balanceamento de árvores/java/alvinegra/Alvinegra.java
+++ b/fonte/u08 Balanceamento de árvores/java/alvinegra/Alvinegra.java
@@ -1,256 +1,247 @@
/**
* Arvore binaria de pesquisa
+ *
* @author Max do Val Machado
*/
public class Alvinegra {
- private NoAN raiz; // Raiz da arvore.
+ private NoAN raiz; // Raiz da arvore.
- /**
- * Construtor da classe.
- */
- public Alvinegra() {
- raiz = null;
- }
+ /**
+ * Construtor da classe.
+ */
+ public Alvinegra() {
+ raiz = null;
+ }
- /**
- * Metodo publico iterativo para pesquisar elemento.
- * @param elemento Elemento que sera procurado.
- * @return true se o elemento existir,
- * false em caso contrario.
- */
- public boolean pesquisar(int elemento) {
- return pesquisar(elemento, raiz);
- }
+ /**
+ * Metodo publico iterativo para pesquisar elemento.
+ *
+ * @param elemento Elemento que sera procurado.
+ * @return true se o elemento existir,
+ * false em caso contrario.
+ */
+ public boolean pesquisar(int elemento) {
+ return pesquisar(elemento, raiz);
+ }
- /**
- * Metodo privado recursivo para pesquisar elemento.
- * @param elemento Elemento que sera procurado.
- * @param i NoAN em analise.
- * @return true se o elemento existir,
- * false em caso contrario.
- */
- private boolean pesquisar(int elemento, NoAN i) {
+ /**
+ * Metodo privado recursivo para pesquisar elemento.
+ *
+ * @param elemento Elemento que sera procurado.
+ * @param i NoAN em analise.
+ * @return true se o elemento existir,
+ * false em caso contrario.
+ */
+ private boolean pesquisar(int elemento, NoAN i) {
boolean resp;
- if (i == null) {
+ if (i == null) {
resp = false;
-
} else if (elemento == i.elemento) {
resp = true;
-
} else if (elemento < i.elemento) {
resp = pesquisar(elemento, i.esq);
-
} else {
resp = pesquisar(elemento, i.dir);
}
return resp;
- }
+ }
- /**
- * Metodo publico iterativo para exibir elementos.
- */
- public void caminharCentral() {
- System.out.print("[ ");
- caminharCentral(raiz);
- System.out.println("]");
- }
+ /**
+ * Metodo publico iterativo para exibir elementos.
+ */
+ public void caminharCentral() {
+ System.out.print("[ ");
+ caminharCentral(raiz);
+ System.out.println("]");
+ }
- /**
- * Metodo privado recursivo para exibir elementos.
- * @param i NoAN em analise.
- */
- private void caminharCentral(NoAN i) {
- if (i != null) {
- caminharCentral(i.esq); // Elementos da esquerda.
- System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
- caminharCentral(i.dir); // Elementos da direita.
- }
- }
+ /**
+ * Metodo privado recursivo para exibir elementos.
+ *
+ * @param i NoAN em analise.
+ */
+ private void caminharCentral(NoAN i) {
+ if (i != null) {
+ caminharCentral(i.esq); // Elementos da esquerda.
+ System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
+ caminharCentral(i.dir); // Elementos da direita.
+ }
+ }
- /**
- * Metodo publico iterativo para exibir elementos.
- */
- public void caminharPre() {
- System.out.print("[ ");
- caminharPre(raiz);
- System.out.println("]");
- }
+ /**
+ * Metodo publico iterativo para exibir elementos.
+ */
+ public void caminharPre() {
+ System.out.print("[ ");
+ caminharPre(raiz);
+ System.out.println("]");
+ }
- /**
- * Metodo privado recursivo para exibir elementos.
- * @param i NoAN em analise.
- */
- private void caminharPre(NoAN i) {
- if (i != null) {
- System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
- caminharPre(i.esq); // Elementos da esquerda.
- caminharPre(i.dir); // Elementos da direita.
- }
- }
+ /**
+ * Metodo privado recursivo para exibir elementos.
+ *
+ * @param i NoAN em analise.
+ */
+ private void caminharPre(NoAN i) {
+ if (i != null) {
+ System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
+ caminharPre(i.esq); // Elementos da esquerda.
+ caminharPre(i.dir); // Elementos da direita.
+ }
+ }
- /**
- * Metodo publico iterativo para exibir elementos.
- */
- public void caminharPos() {
- System.out.print("[ ");
- caminharPos(raiz);
- System.out.println("]");
- }
+ /**
+ * Metodo publico iterativo para exibir elementos.
+ */
+ public void caminharPos() {
+ System.out.print("[ ");
+ caminharPos(raiz);
+ System.out.println("]");
+ }
- /**
- * Metodo privado recursivo para exibir elementos.
- * @param i NoAN em analise.
- */
- private void caminharPos(NoAN i) {
- if (i != null) {
- caminharPos(i.esq); // Elementos da esquerda.
- caminharPos(i.dir); // Elementos da direita.
- System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
- }
- }
+ /**
+ * Metodo privado recursivo para exibir elementos.
+ *
+ * @param i NoAN em analise.
+ */
+ private void caminharPos(NoAN i) {
+ if (i != null) {
+ caminharPos(i.esq); // Elementos da esquerda.
+ caminharPos(i.dir); // Elementos da direita.
+ System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
+ }
+ }
-
- /**
- * Metodo publico iterativo para inserir elemento.
- * @param elemento Elemento a ser inserido.
- * @throws Exception Se o elemento existir.
- */
- public void inserir(int elemento) throws Exception {
-
- //Se a arvore estiver vazia
- if(raiz == null){
+ /**
+ * Metodo publico iterativo para inserir elemento.
+ *
+ * @param elemento Elemento a ser inserido.
+ * @throws Exception Se o elemento existir.
+ */
+ public void inserir(int elemento) throws Exception {
+ // Se a arvore estiver vazia
+ if (raiz == null) {
raiz = new NoAN(elemento);
System.out.println("Antes, zero elementos. Agora, raiz(" + raiz.elemento + ").");
- //Senao, se a arvore tiver um elemento
- } else if (raiz.esq == null && raiz.dir == null){
- if (elemento < raiz.elemento){
+ // Senao, se a arvore tiver um elemento
+ } else if (raiz.esq == null && raiz.dir == null) {
+ if (elemento < raiz.elemento) {
raiz.esq = new NoAN(elemento);
- System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e esq(" + raiz.esq.elemento +").");
+ System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e esq(" + raiz.esq.elemento + ").");
} else {
raiz.dir = new NoAN(elemento);
- System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e dir(" + raiz.dir.elemento +").");
+ System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e dir(" + raiz.dir.elemento + ").");
}
- //Senao, se a arvore tiver dois elementos (raiz e dir)
- } else if (raiz.esq == null){
-
- if(elemento < raiz.elemento){
+ // Senao, se a arvore tiver dois elementos (raiz e dir)
+ } else if (raiz.esq == null) {
+ if (elemento < raiz.elemento) {
raiz.esq = new NoAN(elemento);
- System.out.println("Antes, dois elementos(A). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento +") e dir(" + raiz.dir.elemento +").");
+ System.out.println("Antes, dois elementos(A). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ").");
- } else if (elemento < raiz.dir.elemento){
+ } else if (elemento < raiz.dir.elemento) {
raiz.esq = new NoAN(raiz.elemento);
raiz.elemento = elemento;
- System.out.println("Antes, dois elementos(B). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento +") e dir(" + raiz.dir.elemento +").");
+ System.out.println("Antes, dois elementos(B). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ").");
} else {
raiz.esq = new NoAN(raiz.elemento);
raiz.elemento = raiz.dir.elemento;
raiz.dir.elemento = elemento;
- System.out.println("Antes, dois elementos(C). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento +") e dir(" + raiz.dir.elemento +").");
+ System.out.println("Antes, dois elementos(C). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ").");
}
-
raiz.esq.cor = raiz.dir.cor = false;
-
- //Senao, se a arvore tiver dois elementos (raiz e esq)
- } else if (raiz.dir == null){
-
- if(elemento > raiz.elemento){
+
+ // Senao, se a arvore tiver dois elementos (raiz e esq)
+ } else if (raiz.dir == null) {
+ if (elemento > raiz.elemento) {
raiz.dir = new NoAN(elemento);
- System.out.println("Antes, dois elementos(D). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento +") e dir(" + raiz.dir.elemento +").");
- } else if (elemento > raiz.esq.elemento){
+ System.out.println("Antes, dois elementos(D). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ").");
+
+ } else if (elemento > raiz.esq.elemento) {
raiz.dir = new NoAN(raiz.elemento);
raiz.elemento = elemento;
- System.out.println("Antes, dois elementos(E). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento +") e dir(" + raiz.dir.elemento +").");
+ System.out.println("Antes, dois elementos(E). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ").");
+
} else {
raiz.dir = new NoAN(raiz.elemento);
raiz.elemento = raiz.esq.elemento;
raiz.esq.elemento = elemento;
- System.out.println("Antes, dois elementos(F). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento +") e dir(" + raiz.dir.elemento +").");
+ System.out.println("Antes, dois elementos(F). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ").");
}
-
raiz.esq.cor = raiz.dir.cor = false;
- //Senao, a arvore tem tres ou mais elementos
+ // Senao, a arvore tem tres ou mais elementos
} else {
System.out.println("Arvore com tres ou mais elementos...");
- inserir(elemento, null, null, null, raiz);
+ inserir(elemento, null, null, null, raiz);
}
-
raiz.cor = false;
}
- private void balancear(NoAN bisavo, NoAN avo, NoAN pai, NoAN i){
-
- //Se o pai tambem e preto, reequilibrar a arvore, rotacionando o avo
- if(pai.cor == true){
-
- //4 tipos de reequilibrios e acoplamento
- if(pai.elemento > avo.elemento){ // rotacao a esquerda ou direita-esquerda
- if(i.elemento > pai.elemento){
+ private void balancear(NoAN bisavo, NoAN avo, NoAN pai, NoAN i) {
+ // Se o pai tambem e preto, reequilibrar a arvore, rotacionando o avo
+ if (pai.cor == true) {
+ // 4 tipos de reequilibrios e acoplamento
+ if (pai.elemento > avo.elemento) { // rotacao a esquerda ou direita-esquerda
+ if (i.elemento > pai.elemento) {
avo = rotacaoEsq(avo);
} else {
avo = rotacaoDirEsq(avo);
}
-
} else { // rotacao a direita ou esquerda-direita
- if(i.elemento < pai.elemento){
+ if (i.elemento < pai.elemento) {
avo = rotacaoDir(avo);
} else {
avo = rotacaoEsqDir(avo);
}
}
-
- if (bisavo == null){
+ if (bisavo == null) {
raiz = avo;
- } else if(avo.elemento < bisavo.elemento){
+ } else if (avo.elemento < bisavo.elemento) {
bisavo.esq = avo;
} else {
bisavo.dir = avo;
}
-
- //reestabelecer as cores apos a rotacao
+ // reestabelecer as cores apos a rotacao
avo.cor = false;
avo.esq.cor = avo.dir.cor = true;
- System.out.println("Reestabeler cores: avo(" + avo.elemento + "->branco) e avo.esq / avo.dir(" + avo.esq.elemento + "," + avo.dir.elemento + "-> pretos)");
- } //if(pai.cor == true)
+ System.out.println("Reestabeler cores: avo(" + avo.elemento + "->branco) e avo.esq / avo.dir("
+ + avo.esq.elemento + "," + avo.dir.elemento + "-> pretos)");
+ } // if(pai.cor == true)
}
- /**
- * Metodo privado recursivo para inserir elemento.
- * @param elemento Elemento a ser inserido.
- * @param avo NoAN em analise.
- * @param pai NoAN em analise.
- * @param i NoAN em analise.
- * @throws Exception Se o elemento existir.
- */
- private void inserir(int elemento, NoAN bisavo, NoAN avo, NoAN pai, NoAN i) throws Exception {
- if (i == null) {
-
- if(elemento < pai.elemento){
+ /**
+ * Metodo privado recursivo para inserir elemento.
+ *
+ * @param elemento Elemento a ser inserido.
+ * @param avo NoAN em analise.
+ * @param pai NoAN em analise.
+ * @param i NoAN em analise.
+ * @throws Exception Se o elemento existir.
+ */
+ private void inserir(int elemento, NoAN bisavo, NoAN avo, NoAN pai, NoAN i) throws Exception {
+ if (i == null) {
+ if (elemento < pai.elemento) {
i = pai.esq = new NoAN(elemento, true);
} else {
i = pai.dir = new NoAN(elemento, true);
}
-
- if(pai.cor == true){
+ if (pai.cor == true) {
balancear(bisavo, avo, pai, i);
}
-
} else {
-
- //Achou um 4-no: eh preciso fragmeta-lo e reequilibrar a arvore
- if(i.esq != null && i.dir != null && i.esq.cor == true && i.dir.cor == true){
+ // Achou um 4-no: eh preciso fragmeta-lo e reequilibrar a arvore
+ if (i.esq != null && i.dir != null && i.esq.cor == true && i.dir.cor == true) {
i.cor = true;
i.esq.cor = i.dir.cor = false;
- if(i == raiz){
+ if (i == raiz) {
i.cor = false;
- }else if(pai.cor == true){
+ } else if (pai.cor == true) {
balancear(bisavo, avo, pai, i);
}
}
-
if (elemento < i.elemento) {
inserir(elemento, avo, pai, i, i.esq);
} else if (elemento > i.elemento) {
@@ -259,7 +250,7 @@ public class Alvinegra {
throw new Exception("Erro inserir (elemento repetido)!");
}
}
- }
+ }
private NoAN rotacaoDir(NoAN no) {
System.out.println("Rotacao DIR(" + no.elemento + ")");
diff --git a/fonte/u08 Balanceamento de árvores/java/alvinegra/NoAN.java b/fonte/u08 Balanceamento de árvores/java/alvinegra/NoAN.java
index 64eb836..95b0fa7 100644
--- a/fonte/u08 Balanceamento de árvores/java/alvinegra/NoAN.java
+++ b/fonte/u08 Balanceamento de árvores/java/alvinegra/NoAN.java
@@ -1,21 +1,26 @@
/**
* NoAN da arvore binaria
+ *
* @author Max do Val Machado
*/
-class NoAN{
+class NoAN {
public boolean cor;
public int elemento;
public NoAN esq, dir;
- public NoAN (){
- this(-1);
+
+ public NoAN() {
+ this(-1);
}
- public NoAN (int elemento){
- this(elemento, false, null, null);
+
+ public NoAN(int elemento) {
+ this(elemento, false, null, null);
}
- public NoAN (int elemento, boolean cor){
- this(elemento, cor, null, null);
+
+ public NoAN(int elemento, boolean cor) {
+ this(elemento, cor, null, null);
}
- public NoAN (int elemento, boolean cor, NoAN esq, NoAN dir){
+
+ public NoAN(int elemento, boolean cor, NoAN esq, NoAN dir) {
this.cor = cor;
this.elemento = elemento;
this.esq = esq;
diff --git a/fonte/u08 Balanceamento de árvores/java/alvinegra/Principal.java b/fonte/u08 Balanceamento de árvores/java/alvinegra/Principal.java
index fc3e2b7..99e2bf7 100644
--- a/fonte/u08 Balanceamento de árvores/java/alvinegra/Principal.java
+++ b/fonte/u08 Balanceamento de árvores/java/alvinegra/Principal.java
@@ -1,51 +1,48 @@
-import java.util.*;
-
/**
* Principal para Arvore Binaria de Pesquisa
+ *
* @author Max do Val Machado
*/
public class Principal {
- public static void main(String[] args) throws Exception {
+ public static void main(String[] args) throws Exception {
Alvinegra arvore = new Alvinegra();
/*
- arvore.inserir(1);
- arvore.inserir(2);
- arvore.inserir(3);
- arvore.mostrarPre();
-
- arvore = new Alvinegra();
- arvore.inserir(1);
- arvore.inserir(3);
- arvore.inserir(2);
- arvore.mostrarPre();
-
- arvore = new Alvinegra();
- arvore.inserir(2);
- arvore.inserir(1);
- arvore.inserir(3);
- arvore.mostrarPre();
-
- arvore = new Alvinegra();
- arvore.inserir(2);
- arvore.inserir(3);
- arvore.inserir(1);
- arvore.mostrarPre();
-
- arvore = new Alvinegra();
- arvore.inserir(3);
- arvore.inserir(1);
- arvore.inserir(2);
- arvore.mostrarPre();
-
- arvore = new Alvinegra();
- arvore.inserir(3);
- arvore.inserir(2);
- arvore.inserir(1);
- arvore.mostrarPre();
- */
-
- arvore = new Alvinegra();
+ * arvore.inserir(1);
+ * arvore.inserir(2);
+ * arvore.inserir(3);
+ * arvore.mostrarPre();
+ *
+ * arvore = new Alvinegra();
+ * arvore.inserir(1);
+ * arvore.inserir(3);
+ * arvore.inserir(2);
+ * arvore.mostrarPre();
+ *
+ * arvore = new Alvinegra();
+ * arvore.inserir(2);
+ * arvore.inserir(1);
+ * arvore.inserir(3);
+ * arvore.mostrarPre();
+ *
+ * arvore = new Alvinegra();
+ * arvore.inserir(2);
+ * arvore.inserir(3);
+ * arvore.inserir(1);
+ * arvore.mostrarPre();
+ *
+ * arvore = new Alvinegra();
+ * arvore.inserir(3);
+ * arvore.inserir(1);
+ * arvore.inserir(2);
+ * arvore.mostrarPre();
+ *
+ * arvore = new Alvinegra();
+ * arvore.inserir(3);
+ * arvore.inserir(2);
+ * arvore.inserir(1);
+ * arvore.mostrarPre();
+ */
arvore.inserir(4);
arvore.inserir(35);
arvore.inserir(10);
@@ -57,21 +54,20 @@ public class Principal {
arvore.inserir(7);
arvore.inserir(40);
arvore.inserir(20);
- arvore.mostrarPre();
-
+ arvore.caminharPre();
/*
- arvore = new Alvinegra();
- Random gerador = new Random();
- gerador.setSeed(4);
- for(int i = 0; i < 4000; i++){
- int elemento;
- do {
- elemento = ((int)Math.abs(gerador.nextInt())) % 100000;
- } while (arvore.pesquisar(elemento) == true);
- arvore.inserir(elemento);
- arvore.mostrarPre();
- }
- */
- }
+ * arvore = new Alvinegra();
+ * Random gerador = new Random();
+ * gerador.setSeed(4);
+ * for(int i = 0; i < 4000; i++){
+ * int elemento;
+ * do {
+ * elemento = ((int)Math.abs(gerador.nextInt())) % 100000;
+ * } while (arvore.pesquisar(elemento) == true);
+ * arvore.inserir(elemento);
+ * arvore.mostrarPre();
+ * }
+ */
+ }
}
diff --git a/fonte/u08 Balanceamento de árvores/java/avl/AVL.java b/fonte/u08 Balanceamento de árvores/java/avl/AVL.java
index d60c293..f8236e0 100644
--- a/fonte/u08 Balanceamento de árvores/java/avl/AVL.java
+++ b/fonte/u08 Balanceamento de árvores/java/avl/AVL.java
@@ -3,7 +3,7 @@
* @author Max do Val Machado
*/
- public class AVL {
+public class AVL {
private No raiz; // Raiz da arvore.
/**
@@ -228,7 +228,6 @@
noEsq.dir = no;
no.esq = noEsqDir;
-
no.setNivel(); // Atualizar o nivel do no
noEsq.setNivel(); // Atualizar o nivel do noEsq
diff --git a/fonte/u08 Balanceamento de árvores/java/avl/Principal.java b/fonte/u08 Balanceamento de árvores/java/avl/Principal.java
index a178c84..12b7117 100644
--- a/fonte/u08 Balanceamento de árvores/java/avl/Principal.java
+++ b/fonte/u08 Balanceamento de árvores/java/avl/Principal.java
@@ -6,8 +6,8 @@ public class Principal {
public static void main(String[] args) {
try {
AVL avl = new AVL();
- int array[] = {4,35,10,13,3,30,15,12,7,40,20};
- //int array[] = {1,2,3,4,5,6,7,8,9,10};
+ //int array[] = {4,35,10,13,3,30,15,12,7,40,20};
+ int array[] = {1,2,3,4,5,6,7,8,9,10};
for(int item: array){
System.out.println("Inserindo -> " + item);
avl.inserir(item);