organizando identação!!

This commit is contained in:
Felipe Domingos 2021-11-30 08:22:42 -03:00
parent f39a412024
commit 6a013de291
5 changed files with 220 additions and 229 deletions

View File

@ -1,256 +1,247 @@
/** /**
* Arvore binaria de pesquisa * Arvore binaria de pesquisa
*
* @author Max do Val Machado * @author Max do Val Machado
*/ */
public class Alvinegra { public class Alvinegra {
private NoAN raiz; // Raiz da arvore. private NoAN raiz; // Raiz da arvore.
/** /**
* Construtor da classe. * Construtor da classe.
*/ */
public Alvinegra() { public Alvinegra() {
raiz = null; raiz = null;
} }
/** /**
* Metodo publico iterativo para pesquisar elemento. * Metodo publico iterativo para pesquisar elemento.
* @param elemento Elemento que sera procurado. *
* @return <code>true</code> se o elemento existir, * @param elemento Elemento que sera procurado.
* <code>false</code> em caso contrario. * @return <code>true</code> se o elemento existir,
*/ * <code>false</code> em caso contrario.
public boolean pesquisar(int elemento) { */
return pesquisar(elemento, raiz); public boolean pesquisar(int elemento) {
} return pesquisar(elemento, raiz);
}
/** /**
* Metodo privado recursivo para pesquisar elemento. * Metodo privado recursivo para pesquisar elemento.
* @param elemento Elemento que sera procurado. *
* @param i NoAN em analise. * @param elemento Elemento que sera procurado.
* @return <code>true</code> se o elemento existir, * @param i NoAN em analise.
* <code>false</code> em caso contrario. * @return <code>true</code> se o elemento existir,
*/ * <code>false</code> em caso contrario.
private boolean pesquisar(int elemento, NoAN i) { */
private boolean pesquisar(int elemento, NoAN i) {
boolean resp; boolean resp;
if (i == null) { if (i == null) {
resp = false; resp = false;
} else if (elemento == i.elemento) { } else if (elemento == i.elemento) {
resp = true; resp = true;
} else if (elemento < i.elemento) { } else if (elemento < i.elemento) {
resp = pesquisar(elemento, i.esq); resp = pesquisar(elemento, i.esq);
} else { } else {
resp = pesquisar(elemento, i.dir); resp = pesquisar(elemento, i.dir);
} }
return resp; return resp;
} }
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo publico iterativo para exibir elementos.
*/ */
public void caminharCentral() { public void caminharCentral() {
System.out.print("[ "); System.out.print("[ ");
caminharCentral(raiz); caminharCentral(raiz);
System.out.println("]"); System.out.println("]");
} }
/** /**
* Metodo privado recursivo para exibir elementos. * Metodo privado recursivo para exibir elementos.
* @param i NoAN em analise. *
*/ * @param i NoAN em analise.
private void caminharCentral(NoAN i) { */
if (i != null) { private void caminharCentral(NoAN i) {
caminharCentral(i.esq); // Elementos da esquerda. if (i != null) {
System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. caminharCentral(i.esq); // Elementos da esquerda.
caminharCentral(i.dir); // Elementos da direita. System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
} caminharCentral(i.dir); // Elementos da direita.
} }
}
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo publico iterativo para exibir elementos.
*/ */
public void caminharPre() { public void caminharPre() {
System.out.print("[ "); System.out.print("[ ");
caminharPre(raiz); caminharPre(raiz);
System.out.println("]"); System.out.println("]");
} }
/** /**
* Metodo privado recursivo para exibir elementos. * Metodo privado recursivo para exibir elementos.
* @param i NoAN em analise. *
*/ * @param i NoAN em analise.
private void caminharPre(NoAN i) { */
if (i != null) { private void caminharPre(NoAN i) {
System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. if (i != null) {
caminharPre(i.esq); // Elementos da esquerda. System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
caminharPre(i.dir); // Elementos da direita. caminharPre(i.esq); // Elementos da esquerda.
} caminharPre(i.dir); // Elementos da direita.
} }
}
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo publico iterativo para exibir elementos.
*/ */
public void caminharPos() { public void caminharPos() {
System.out.print("[ "); System.out.print("[ ");
caminharPos(raiz); caminharPos(raiz);
System.out.println("]"); System.out.println("]");
} }
/** /**
* Metodo privado recursivo para exibir elementos. * Metodo privado recursivo para exibir elementos.
* @param i NoAN em analise. *
*/ * @param i NoAN em analise.
private void caminharPos(NoAN i) { */
if (i != null) { private void caminharPos(NoAN i) {
caminharPos(i.esq); // Elementos da esquerda. if (i != null) {
caminharPos(i.dir); // Elementos da direita. caminharPos(i.esq); // Elementos da esquerda.
System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. caminharPos(i.dir); // Elementos da direita.
} System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no.
} }
}
/**
/** * Metodo publico iterativo para inserir elemento.
* Metodo publico iterativo para inserir elemento. *
* @param elemento Elemento a ser inserido. * @param elemento Elemento a ser inserido.
* @throws Exception Se o elemento existir. * @throws Exception Se o elemento existir.
*/ */
public void inserir(int elemento) throws Exception { public void inserir(int elemento) throws Exception {
// Se a arvore estiver vazia
//Se a arvore estiver vazia if (raiz == null) {
if(raiz == null){
raiz = new NoAN(elemento); raiz = new NoAN(elemento);
System.out.println("Antes, zero elementos. Agora, raiz(" + raiz.elemento + ")."); System.out.println("Antes, zero elementos. Agora, raiz(" + raiz.elemento + ").");
//Senao, se a arvore tiver um elemento // Senao, se a arvore tiver um elemento
} else if (raiz.esq == null && raiz.dir == null){ } else if (raiz.esq == null && raiz.dir == null) {
if (elemento < raiz.elemento){ if (elemento < raiz.elemento) {
raiz.esq = new NoAN(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 { } else {
raiz.dir = new NoAN(elemento); 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) // Senao, se a arvore tiver dois elementos (raiz e dir)
} else if (raiz.esq == null){ } else if (raiz.esq == null) {
if (elemento < raiz.elemento) {
if(elemento < raiz.elemento){
raiz.esq = new NoAN(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.esq = new NoAN(raiz.elemento);
raiz.elemento = 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 { } else {
raiz.esq = new NoAN(raiz.elemento); raiz.esq = new NoAN(raiz.elemento);
raiz.elemento = raiz.dir.elemento; raiz.elemento = raiz.dir.elemento;
raiz.dir.elemento = 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; raiz.esq.cor = raiz.dir.cor = false;
//Senao, se a arvore tiver dois elementos (raiz e esq) // Senao, se a arvore tiver dois elementos (raiz e esq)
} else if (raiz.dir == null){ } else if (raiz.dir == null) {
if (elemento > raiz.elemento) {
if(elemento > raiz.elemento){
raiz.dir = new NoAN(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 +")."); 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){
} else if (elemento > raiz.esq.elemento) {
raiz.dir = new NoAN(raiz.elemento); raiz.dir = new NoAN(raiz.elemento);
raiz.elemento = 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 { } else {
raiz.dir = new NoAN(raiz.elemento); raiz.dir = new NoAN(raiz.elemento);
raiz.elemento = raiz.esq.elemento; raiz.elemento = raiz.esq.elemento;
raiz.esq.elemento = 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; raiz.esq.cor = raiz.dir.cor = false;
//Senao, a arvore tem tres ou mais elementos // Senao, a arvore tem tres ou mais elementos
} else { } else {
System.out.println("Arvore com tres ou mais elementos..."); System.out.println("Arvore com tres ou mais elementos...");
inserir(elemento, null, null, null, raiz); inserir(elemento, null, null, null, raiz);
} }
raiz.cor = false; raiz.cor = false;
} }
private void balancear(NoAN bisavo, NoAN avo, NoAN pai, NoAN i){ private void balancear(NoAN bisavo, NoAN avo, NoAN pai, NoAN i) {
// Se o pai tambem e preto, reequilibrar a arvore, rotacionando o avo
//Se o pai tambem e preto, reequilibrar a arvore, rotacionando o avo if (pai.cor == true) {
if(pai.cor == true){ // 4 tipos de reequilibrios e acoplamento
if (pai.elemento > avo.elemento) { // rotacao a esquerda ou direita-esquerda
//4 tipos de reequilibrios e acoplamento if (i.elemento > pai.elemento) {
if(pai.elemento > avo.elemento){ // rotacao a esquerda ou direita-esquerda
if(i.elemento > pai.elemento){
avo = rotacaoEsq(avo); avo = rotacaoEsq(avo);
} else { } else {
avo = rotacaoDirEsq(avo); avo = rotacaoDirEsq(avo);
} }
} else { // rotacao a direita ou esquerda-direita } else { // rotacao a direita ou esquerda-direita
if(i.elemento < pai.elemento){ if (i.elemento < pai.elemento) {
avo = rotacaoDir(avo); avo = rotacaoDir(avo);
} else { } else {
avo = rotacaoEsqDir(avo); avo = rotacaoEsqDir(avo);
} }
} }
if (bisavo == null) {
if (bisavo == null){
raiz = avo; raiz = avo;
} else if(avo.elemento < bisavo.elemento){ } else if (avo.elemento < bisavo.elemento) {
bisavo.esq = avo; bisavo.esq = avo;
} else { } else {
bisavo.dir = avo; bisavo.dir = avo;
} }
// reestabelecer as cores apos a rotacao
//reestabelecer as cores apos a rotacao
avo.cor = false; avo.cor = false;
avo.esq.cor = avo.dir.cor = true; 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)"); System.out.println("Reestabeler cores: avo(" + avo.elemento + "->branco) e avo.esq / avo.dir("
} //if(pai.cor == true) + avo.esq.elemento + "," + avo.dir.elemento + "-> pretos)");
} // if(pai.cor == true)
} }
/** /**
* Metodo privado recursivo para inserir elemento. * Metodo privado recursivo para inserir elemento.
* @param elemento Elemento a ser inserido. *
* @param avo NoAN em analise. * @param elemento Elemento a ser inserido.
* @param pai NoAN em analise. * @param avo NoAN em analise.
* @param i NoAN em analise. * @param pai NoAN em analise.
* @throws Exception Se o elemento existir. * @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) { private void inserir(int elemento, NoAN bisavo, NoAN avo, NoAN pai, NoAN i) throws Exception {
if (i == null) {
if(elemento < pai.elemento){ if (elemento < pai.elemento) {
i = pai.esq = new NoAN(elemento, true); i = pai.esq = new NoAN(elemento, true);
} else { } else {
i = pai.dir = new NoAN(elemento, true); i = pai.dir = new NoAN(elemento, true);
} }
if (pai.cor == true) {
if(pai.cor == true){
balancear(bisavo, avo, pai, i); balancear(bisavo, avo, pai, i);
} }
} else { } else {
// Achou um 4-no: eh preciso fragmeta-lo e reequilibrar a arvore
//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) {
if(i.esq != null && i.dir != null && i.esq.cor == true && i.dir.cor == true){
i.cor = true; i.cor = true;
i.esq.cor = i.dir.cor = false; i.esq.cor = i.dir.cor = false;
if(i == raiz){ if (i == raiz) {
i.cor = false; i.cor = false;
}else if(pai.cor == true){ } else if (pai.cor == true) {
balancear(bisavo, avo, pai, i); balancear(bisavo, avo, pai, i);
} }
} }
if (elemento < i.elemento) { if (elemento < i.elemento) {
inserir(elemento, avo, pai, i, i.esq); inserir(elemento, avo, pai, i, i.esq);
} else if (elemento > i.elemento) { } else if (elemento > i.elemento) {
@ -259,7 +250,7 @@ public class Alvinegra {
throw new Exception("Erro inserir (elemento repetido)!"); throw new Exception("Erro inserir (elemento repetido)!");
} }
} }
} }
private NoAN rotacaoDir(NoAN no) { private NoAN rotacaoDir(NoAN no) {
System.out.println("Rotacao DIR(" + no.elemento + ")"); System.out.println("Rotacao DIR(" + no.elemento + ")");

View File

@ -1,21 +1,26 @@
/** /**
* NoAN da arvore binaria * NoAN da arvore binaria
*
* @author Max do Val Machado * @author Max do Val Machado
*/ */
class NoAN{ class NoAN {
public boolean cor; public boolean cor;
public int elemento; public int elemento;
public NoAN esq, dir; 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.cor = cor;
this.elemento = elemento; this.elemento = elemento;
this.esq = esq; this.esq = esq;

View File

@ -1,51 +1,48 @@
import java.util.*;
/** /**
* Principal para Arvore Binaria de Pesquisa * Principal para Arvore Binaria de Pesquisa
*
* @author Max do Val Machado * @author Max do Val Machado
*/ */
public class Principal { public class Principal {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Alvinegra arvore = new Alvinegra(); Alvinegra arvore = new Alvinegra();
/* /*
arvore.inserir(1); * arvore.inserir(1);
arvore.inserir(2); * arvore.inserir(2);
arvore.inserir(3); * arvore.inserir(3);
arvore.mostrarPre(); * arvore.mostrarPre();
*
arvore = new Alvinegra(); * arvore = new Alvinegra();
arvore.inserir(1); * arvore.inserir(1);
arvore.inserir(3); * arvore.inserir(3);
arvore.inserir(2); * arvore.inserir(2);
arvore.mostrarPre(); * arvore.mostrarPre();
*
arvore = new Alvinegra(); * arvore = new Alvinegra();
arvore.inserir(2); * arvore.inserir(2);
arvore.inserir(1); * arvore.inserir(1);
arvore.inserir(3); * arvore.inserir(3);
arvore.mostrarPre(); * arvore.mostrarPre();
*
arvore = new Alvinegra(); * arvore = new Alvinegra();
arvore.inserir(2); * arvore.inserir(2);
arvore.inserir(3); * arvore.inserir(3);
arvore.inserir(1); * arvore.inserir(1);
arvore.mostrarPre(); * arvore.mostrarPre();
*
arvore = new Alvinegra(); * arvore = new Alvinegra();
arvore.inserir(3); * arvore.inserir(3);
arvore.inserir(1); * arvore.inserir(1);
arvore.inserir(2); * arvore.inserir(2);
arvore.mostrarPre(); * arvore.mostrarPre();
*
arvore = new Alvinegra(); * arvore = new Alvinegra();
arvore.inserir(3); * arvore.inserir(3);
arvore.inserir(2); * arvore.inserir(2);
arvore.inserir(1); * arvore.inserir(1);
arvore.mostrarPre(); * arvore.mostrarPre();
*/ */
arvore = new Alvinegra();
arvore.inserir(4); arvore.inserir(4);
arvore.inserir(35); arvore.inserir(35);
arvore.inserir(10); arvore.inserir(10);
@ -57,21 +54,20 @@ public class Principal {
arvore.inserir(7); arvore.inserir(7);
arvore.inserir(40); arvore.inserir(40);
arvore.inserir(20); arvore.inserir(20);
arvore.mostrarPre(); arvore.caminharPre();
/* /*
arvore = new Alvinegra(); * arvore = new Alvinegra();
Random gerador = new Random(); * Random gerador = new Random();
gerador.setSeed(4); * gerador.setSeed(4);
for(int i = 0; i < 4000; i++){ * for(int i = 0; i < 4000; i++){
int elemento; * int elemento;
do { * do {
elemento = ((int)Math.abs(gerador.nextInt())) % 100000; * elemento = ((int)Math.abs(gerador.nextInt())) % 100000;
} while (arvore.pesquisar(elemento) == true); * } while (arvore.pesquisar(elemento) == true);
arvore.inserir(elemento); * arvore.inserir(elemento);
arvore.mostrarPre(); * arvore.mostrarPre();
} * }
*/ */
} }
} }

View File

@ -3,7 +3,7 @@
* @author Max do Val Machado * @author Max do Val Machado
*/ */
public class AVL { public class AVL {
private No raiz; // Raiz da arvore. private No raiz; // Raiz da arvore.
/** /**
@ -228,7 +228,6 @@
noEsq.dir = no; noEsq.dir = no;
no.esq = noEsqDir; no.esq = noEsqDir;
no.setNivel(); // Atualizar o nivel do no no.setNivel(); // Atualizar o nivel do no
noEsq.setNivel(); // Atualizar o nivel do noEsq noEsq.setNivel(); // Atualizar o nivel do noEsq

View File

@ -6,8 +6,8 @@ public class Principal {
public static void main(String[] args) { public static void main(String[] args) {
try { try {
AVL avl = new AVL(); AVL avl = new AVL();
int array[] = {4,35,10,13,3,30,15,12,7,40,20}; //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[] = {1,2,3,4,5,6,7,8,9,10};
for(int item: array){ for(int item: array){
System.out.println("Inserindo -> " + item); System.out.println("Inserindo -> " + item);
avl.inserir(item); avl.inserir(item);