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,5 +1,6 @@
/**
* Arvore binaria de pesquisa
*
* @author Max do Val Machado
*/
public class Alvinegra {
@ -14,6 +15,7 @@ public class Alvinegra {
/**
* Metodo publico iterativo para pesquisar elemento.
*
* @param elemento Elemento que sera procurado.
* @return <code>true</code> se o elemento existir,
* <code>false</code> em caso contrario.
@ -24,6 +26,7 @@ public class Alvinegra {
/**
* Metodo privado recursivo para pesquisar elemento.
*
* @param elemento Elemento que sera procurado.
* @param i NoAN em analise.
* @return <code>true</code> se o elemento existir,
@ -33,13 +36,10 @@ public class Alvinegra {
boolean resp;
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);
}
@ -57,6 +57,7 @@ public class Alvinegra {
/**
* Metodo privado recursivo para exibir elementos.
*
* @param i NoAN em analise.
*/
private void caminharCentral(NoAN i) {
@ -78,6 +79,7 @@ public class Alvinegra {
/**
* Metodo privado recursivo para exibir elementos.
*
* @param i NoAN em analise.
*/
private void caminharPre(NoAN i) {
@ -99,6 +101,7 @@ public class Alvinegra {
/**
* Metodo privado recursivo para exibir elementos.
*
* @param i NoAN em analise.
*/
private void caminharPos(NoAN i) {
@ -109,14 +112,13 @@ public class Alvinegra {
}
}
/**
* 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);
@ -134,7 +136,6 @@ public class Alvinegra {
// 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 + ").");
@ -150,26 +151,25 @@ public class Alvinegra {
raiz.dir.elemento = 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) {
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) {
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 + ").");
} 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 + ").");
}
raiz.esq.cor = raiz.dir.cor = false;
// Senao, a arvore tem tres ou mais elementos
@ -177,15 +177,12 @@ public class Alvinegra {
System.out.println("Arvore com tres ou mais elementos...");
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) {
@ -193,7 +190,6 @@ public class Alvinegra {
} else {
avo = rotacaoDirEsq(avo);
}
} else { // rotacao a direita ou esquerda-direita
if (i.elemento < pai.elemento) {
avo = rotacaoDir(avo);
@ -201,7 +197,6 @@ public class Alvinegra {
avo = rotacaoEsqDir(avo);
}
}
if (bisavo == null) {
raiz = avo;
} else if (avo.elemento < bisavo.elemento) {
@ -209,16 +204,17 @@ public class Alvinegra {
} else {
bisavo.dir = avo;
}
// 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)");
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.
@ -227,19 +223,15 @@ public class Alvinegra {
*/
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) {
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) {
i.cor = true;
@ -250,7 +242,6 @@ public class Alvinegra {
balancear(bisavo, avo, pai, i);
}
}
if (elemento < i.elemento) {
inserir(elemento, avo, pai, i, i.esq);
} else if (elemento > i.elemento) {

View File

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

View File

@ -1,7 +1,6 @@
import java.util.*;
/**
* Principal para Arvore Binaria de Pesquisa
*
* @author Max do Val Machado
*/
public class Principal {
@ -9,43 +8,41 @@ public class Principal {
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.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(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();
* }
*/
}
}

View File

@ -228,7 +228,6 @@
noEsq.dir = no;
no.esq = noEsqDir;
no.setNivel(); // Atualizar o nivel do no
noEsq.setNivel(); // Atualizar o nivel do noEsq

View File

@ -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);