buf fixed!

This commit is contained in:
Felipe Domingos 2021-11-15 15:19:10 -03:00
parent aae3f0549c
commit d979f0a58c
17 changed files with 554 additions and 575 deletions

View File

@ -8,31 +8,31 @@ typedef struct Celula {
} Celula; } Celula;
Celula* novaCelula(int elemento) { Celula* novaCelula(int elemento) {
Celula* nova = (Celula*) malloc(sizeof(Celula)); Celula* nova = (Celula*) malloc(sizeof(Celula));
nova->elemento = elemento; nova->elemento = elemento;
nova->prox = NULL; nova->prox = NULL;
return nova; return nova;
} }
Celula* primeiro; Celula* primeiro;
void start () { void start () {
primeiro = novaCelula(-1); primeiro = novaCelula(-1);
} }
void inserir(int x) { void inserir(int x) {
primeiro->prox = novaCelula(x); primeiro->prox = novaCelula(x);
Celula* tmp = primeiro; Celula* tmp = primeiro;
primeiro = primeiro->prox; primeiro = primeiro->prox;
free(tmp); free(tmp);
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
start(); start();
while(true){ while(true){
inserir(0); inserir(0);
} }
return 0; return 0;
} }

View File

@ -8,7 +8,7 @@ public class FilaNativa {
fila.add("Cruzeiro"); fila.add("Cruzeiro");
fila.add("América"); fila.add("América");
while (fila.isEmpty() == false){ while (!fila.isEmpty()){
System.out.println("Retirando da fila: " + fila.remove()); System.out.println("Retirando da fila: " + fila.remove());
} }
} }

View File

@ -33,3 +33,4 @@ class ListaNativa {
} }
} }
} }

View File

@ -4,23 +4,23 @@
* @version 2 01/2015 * @version 2 01/2015
*/ */
class Celula { class Celula {
public int elemento; // Elemento inserido na celula. public int elemento; // Elemento inserido na celula.
public Celula prox; // Aponta a celula prox. public Celula prox; // Aponta a celula prox.
/** /**
* Construtor da classe. * Construtor da classe.
*/ */
public Celula() { public Celula() {
this(0); this(0);
} }
/** /**
* Construtor da classe. * Construtor da classe.
* @param elemento int inserido na celula. * @param elemento int inserido na celula.
*/ */
public Celula(int elemento) { public Celula(int elemento) {
this.elemento = elemento; this.elemento = elemento;
this.prox = null; this.prox = null;
} }
} }

View File

@ -1,24 +1,23 @@
class ColetaLixo { class ColetaLixo {
private Celula primeiro; private Celula primeiro;
public ColetaLixo () { public ColetaLixo () {
primeiro = new Celula(); primeiro = new Celula();
} }
public void inserir(int x) { public void inserir(int x) {
primeiro.prox = new Celula(x); primeiro.prox = new Celula(x);
primeiro = primeiro.prox; primeiro = primeiro.prox;
} }
public static void main (String [] args) { public static void main (String [] args) {
ColetaLixo coletaLixo = new ColetaLixo (); ColetaLixo coletaLixo = new ColetaLixo ();
while(true){
while(true){ coletaLixo.inserir(0);
coletaLixo.inserir(0); }
} }
}
} }

View File

@ -198,3 +198,6 @@ void maiorEsq(No** i, No** j) {
free(del); free(del);
} }
} }

View File

@ -55,6 +55,5 @@ int main(){
caminharPre(); caminharPre();
caminharPos(); caminharPos();
return 1; return 1;
} }

View File

@ -10,7 +10,7 @@
* Construtor da classe. * Construtor da classe.
*/ */
ArvoreBinaria::ArvoreBinaria() { ArvoreBinaria::ArvoreBinaria() {
raiz = NULL; raiz = NULL;
} }
/** /**
@ -20,7 +20,7 @@ ArvoreBinaria::ArvoreBinaria() {
* <code>false</code> em caso contrario. * <code>false</code> em caso contrario.
*/ */
bool ArvoreBinaria::pesquisar(int x) { bool ArvoreBinaria::pesquisar(int x) {
return pesquisar(x, raiz); return pesquisar(x, raiz);
} }
/** /**
@ -31,29 +31,29 @@ bool ArvoreBinaria::pesquisar(int x) {
* <code>false</code> em caso contrario. * <code>false</code> em caso contrario.
*/ */
bool ArvoreBinaria::pesquisar(int x, No* i) { bool ArvoreBinaria::pesquisar(int x, No* i) {
bool resp; bool resp;
if (i == NULL) { if (i == NULL) {
resp = false; resp = false;
} else if (x == i->elemento) { } else if (x == i->elemento) {
resp = true; resp = true;
} else if (x < i->elemento) { } else if (x < i->elemento) {
resp = pesquisar(x, i->esq); resp = pesquisar(x, i->esq);
} else { } else {
resp = pesquisar(x, i->dir); resp = pesquisar(x, i->dir);
} }
return resp; return resp;
} }
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo publico iterativo para exibir elementos.
*/ */
void ArvoreBinaria::caminharCentral() { void ArvoreBinaria::caminharCentral() {
cout << "[ "; cout << "[ ";
caminharCentral(raiz); caminharCentral(raiz);
cout << "]\n"; cout << "]\n";
} }
/** /**
@ -61,20 +61,20 @@ void ArvoreBinaria::caminharCentral() {
* @param i No em analise. * @param i No em analise.
*/ */
void ArvoreBinaria::caminharCentral(No* i) { void ArvoreBinaria::caminharCentral(No* i) {
if (i != NULL) { if (i != NULL) {
caminharCentral(i->esq); // Elementos da esquerda. caminharCentral(i->esq); // Elementos da esquerda.
cout << i->elemento << " "; // Conteudo do no. cout << i->elemento << " "; // Conteudo do no.
caminharCentral(i->dir); // Elementos da direita. caminharCentral(i->dir); // Elementos da direita.
} }
} }
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo publico iterativo para exibir elementos.
*/ */
void ArvoreBinaria::caminharPre() { void ArvoreBinaria::caminharPre() {
cout << "[ "; cout << "[ ";
caminharPre(raiz); caminharPre(raiz);
cout << "]\n"; cout << "]\n";
} }
/** /**
@ -82,20 +82,20 @@ void ArvoreBinaria::caminharPre() {
* @param i No em analise. * @param i No em analise.
*/ */
void ArvoreBinaria::caminharPre(No* i) { void ArvoreBinaria::caminharPre(No* i) {
if (i != NULL) { if (i != NULL) {
cout << i->elemento << " "; // Conteudo do no. cout << i->elemento << " "; // Conteudo do no.
caminharPre(i->esq); // Elementos da esquerda. caminharPre(i->esq); // Elementos da esquerda.
caminharPre(i->dir); // Elementos da direita. caminharPre(i->dir); // Elementos da direita.
} }
} }
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo publico iterativo para exibir elementos.
*/ */
void ArvoreBinaria::caminharPos() { void ArvoreBinaria::caminharPos() {
cout << "[ "; cout << "[ ";
caminharPos(raiz); caminharPos(raiz);
cout << "]\n"; cout << "]\n";
} }
/** /**
@ -103,11 +103,11 @@ void ArvoreBinaria::caminharPos() {
* @param i No em analise. * @param i No em analise.
*/ */
void ArvoreBinaria::caminharPos(No* i) { void ArvoreBinaria::caminharPos(No* i) {
if (i != NULL) { if (i != NULL) {
caminharPos(i->esq); // Elementos da esquerda. caminharPos(i->esq); // Elementos da esquerda.
caminharPos(i->dir); // Elementos da direita. caminharPos(i->dir); // Elementos da direita.
cout << i->elemento << " "; // Conteudo do no. cout << i->elemento << " "; // Conteudo do no.
} }
} }
/** /**
@ -115,7 +115,7 @@ void ArvoreBinaria::caminharPos(No* i) {
* @param x Elemento a ser inserido. * @param x Elemento a ser inserido.
*/ */
void ArvoreBinaria::inserir(int x) { void ArvoreBinaria::inserir(int x) {
inserir(x, raiz); inserir(x, raiz);
} }
/** /**
@ -124,26 +124,26 @@ void ArvoreBinaria::inserir(int x) {
* @param i No em analise. * @param i No em analise.
*/ */
void ArvoreBinaria::inserir(int x, No* &i) { void ArvoreBinaria::inserir(int x, No* &i) {
if (i == NULL) { if (i == NULL) {
i = new No(x); i = new No(x);
} else if (x < i->elemento) { } else if (x < i->elemento) {
inserir(x, i->esq); inserir(x, i->esq);
} else if (x > i->elemento) { } else if (x > i->elemento) {
inserir(x, i->dir); inserir(x, i->dir);
} else { } else {
errx(1, "Erro ao inserir!"); errx(1, "Erro ao inserir!");
} }
} }
/** /**
* Metodo publico iterativo para remover elemento. * Metodo publico iterativo para remover elemento.
* @param x Elemento a ser removido. * @param x Elemento a ser removido.
*/ */
void ArvoreBinaria::remover(int x) { void ArvoreBinaria::remover(int x) {
remover(x, raiz); remover(x, raiz);
} }
/** /**
@ -152,31 +152,31 @@ void ArvoreBinaria::remover(int x) {
* @param i No em analise. * @param i No em analise.
*/ */
void ArvoreBinaria::remover(int x, No* &i) { void ArvoreBinaria::remover(int x, No* &i) {
if (i == NULL) { if (i == NULL) {
errx(1, "Erro ao remover!"); errx(1, "Erro ao remover!");
} else if (x < i->elemento) { } else if (x < i->elemento) {
remover(x, i->esq); remover(x, i->esq);
} else if (x > i->elemento) { } else if (x > i->elemento) {
remover(x, i->dir); remover(x, i->dir);
// Sem no a direita. // Sem no a direita.
} else if (i->dir == NULL) { } else if (i->dir == NULL) {
No* del = i; No* del = i;
i = i->esq; i = i->esq;
delete del; delete del;
// Sem no a esquerda. // Sem no a esquerda.
} else if (i->esq == NULL) { } else if (i->esq == NULL) {
No* del = i; No* del = i;
i = i->dir; i = i->dir;
delete del; delete del;
// No a esquerda e no a direita. // No a esquerda e no a direita.
} else { } else {
maiorEsq(i, i->esq); maiorEsq(i, i->esq);
} }
} }
@ -186,15 +186,15 @@ void ArvoreBinaria::remover(int x, No* &i) {
* @param j No da subarvore esquerda. * @param j No da subarvore esquerda.
*/ */
void ArvoreBinaria::maiorEsq(No* i, No* &j) { void ArvoreBinaria::maiorEsq(No* i, No* &j) {
// Encontrou o maximo da subarvore esquerda. // Encontrou o maximo da subarvore esquerda.
if (j->dir == NULL) { if (j->dir == NULL) {
No* del = j; No* del = j;
i->elemento = j->elemento; // Substitui i por j. i->elemento = j->elemento; // Substitui i por j.
j = j->esq; // Substitui j por j.ESQ. j = j->esq; // Substitui j por j.ESQ.
delete del; delete del;
// Existe no a direita. // Existe no a direita.
} else { } else {
maiorEsq(i, j->dir); // Caminha para direita. maiorEsq(i, j->dir); // Caminha para direita.
} }
} }

View File

@ -6,22 +6,22 @@
#include "no.h" #include "no.h"
class ArvoreBinaria { class ArvoreBinaria {
private: private:
No* raiz; // Raiz da arvore. No* raiz; // Raiz da arvore.
bool pesquisar(int, No*); bool pesquisar(int, No*);
void caminharCentral(No*); void caminharCentral(No*);
void caminharPre(No*); void caminharPre(No*);
void caminharPos(No*); void caminharPos(No*);
void inserir(int, No* &); void inserir(int, No* &);
void remover(int, No* &); void remover(int, No* &);
void antecessor(No*, No* &); void maiorEsq(No*, No* &);
public: public:
ArvoreBinaria(); ArvoreBinaria();
bool pesquisar(int); bool pesquisar(int);
void caminharCentral(); void caminharCentral();
void caminharPre(); void caminharPre();
void caminharPos(); void caminharPos();
void inserir(int); void inserir(int);
void remover(int); void remover(int);
}; };

View File

@ -7,8 +7,8 @@
using namespace std; using namespace std;
class No { class No {
public: public:
int elemento; // Conteudo do no. int elemento; // Conteudo do no.
No *esq, *dir; // Filhos da esq e dir. No *esq, *dir; // Filhos da esq e dir.
No(int); No(int);
}; };

View File

@ -3,407 +3,400 @@
* @author Max do Val Machado * @author Max do Val Machado
*/ */
public class ArvoreBinaria { public class ArvoreBinaria {
private No raiz; // Raiz da arvore. private No raiz; // Raiz da arvore.
/** /**
* Construtor da classe. * Construtor da classe.
*/ */
public ArvoreBinaria() { public ArvoreBinaria() {
raiz = null; raiz = null;
} }
/** /**
* Metodo publico iterativo para pesquisar elemento. * Metodo publico iterativo para pesquisar elemento.
* @param x Elemento que sera procurado. * @param x Elemento que sera procurado.
* @return <code>true</code> se o elemento existir, * @return <code>true</code> se o elemento existir,
* <code>false</code> em caso contrario. * <code>false</code> em caso contrario.
*/ */
public boolean pesquisar(int x) { public boolean pesquisar(int x) {
return pesquisar(x, raiz); return pesquisar(x, raiz);
} }
/** /**
* Metodo privado recursivo para pesquisar elemento. * Metodo privado recursivo para pesquisar elemento.
* @param x Elemento que sera procurado. * @param x Elemento que sera procurado.
* @param i No em analise. * @param i No em analise.
* @return <code>true</code> se o elemento existir, * @return <code>true</code> se o elemento existir,
* <code>false</code> em caso contrario. * <code>false</code> em caso contrario.
*/ */
private boolean pesquisar(int x, No i) { private boolean pesquisar(int x, No i) {
boolean resp; boolean resp;
if (i == null) { if (i == null) {
resp = false; resp = false;
} else if (x == i.elemento) {
resp = true;
} else if (x < i.elemento) {
resp = pesquisar(x, i.esq);
} else {
resp = pesquisar(x, i.dir);
}
return resp;
}
} else if (x == i.elemento) { /**
resp = true; * Metodo publico iterativo para exibir elementos.
*/
public void caminharCentral() {
System.out.print("[ ");
caminharCentral(raiz);
System.out.println("]");
}
} else if (x < i.elemento) { /**
resp = pesquisar(x, i.esq); * Metodo privado recursivo para exibir elementos.
* @param i No em analise.
*/
private void caminharCentral(No i) {
if (i != null) {
caminharCentral(i.esq); // Elementos da esquerda.
System.out.print(i.elemento + " "); // Conteudo do no.
caminharCentral(i.dir); // Elementos da direita.
}
}
} else { /**
resp = pesquisar(x, i.dir); * Metodo publico iterativo para exibir elementos.
} */
return resp; public void caminharPre() {
} System.out.print("[ ");
caminharPre(raiz);
System.out.println("]");
}
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo privado recursivo para exibir elementos.
*/ * @param i No em analise.
public void caminharCentral() { */
System.out.print("[ "); private void caminharPre(No i) {
caminharCentral(raiz); if (i != null) {
System.out.println("]"); System.out.print(i.elemento + " "); // Conteudo do no.
} caminharPre(i.esq); // Elementos da esquerda.
caminharPre(i.dir); // Elementos da direita.
}
}
/** /**
* Metodo privado recursivo para exibir elementos. * Metodo publico iterativo para exibir elementos.
* @param i No em analise. */
*/ public void caminharPos() {
private void caminharCentral(No i) { System.out.print("[ ");
if (i != null) { caminharPos(raiz);
caminharCentral(i.esq); // Elementos da esquerda. System.out.println("]");
System.out.print(i.elemento + " "); // Conteudo do no. }
caminharCentral(i.dir); // Elementos da direita.
}
}
/** /**
* Metodo publico iterativo para exibir elementos. * Metodo privado recursivo para exibir elementos.
*/ * @param i No em analise.
public void caminharPre() { */
System.out.print("[ "); private void caminharPos(No i) {
caminharPre(raiz); if (i != null) {
System.out.println("]"); caminharPos(i.esq); // Elementos da esquerda.
} caminharPos(i.dir); // Elementos da direita.
System.out.print(i.elemento + " "); // Conteudo do no.
/** }
* Metodo privado recursivo para exibir elementos. }
* @param i No em analise.
*/
private void caminharPre(No i) {
if (i != null) {
System.out.print(i.elemento + " "); // 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 privado recursivo para exibir elementos.
* @param i No em analise.
*/
private void caminharPos(No i) {
if (i != null) {
caminharPos(i.esq); // Elementos da esquerda.
caminharPos(i.dir); // Elementos da direita.
System.out.print(i.elemento + " "); // Conteudo do no.
}
}
/** /**
* Metodo publico iterativo para inserir elemento. * Metodo publico iterativo para inserir elemento.
* @param x Elemento a ser inserido. * @param x Elemento a ser inserido.
* @throws Exception Se o elemento existir. * @throws Exception Se o elemento existir.
*/ */
public void inserir(int x) throws Exception { public void inserir(int x) throws Exception {
raiz = inserir(x, raiz); raiz = inserir(x, raiz);
} }
/** /**
* Metodo privado recursivo para inserir elemento. * Metodo privado recursivo para inserir elemento.
* @param x Elemento a ser inserido. * @param x Elemento a ser inserido.
* @param i No em analise. * @param i No em analise.
* @return No em analise, alterado ou nao. * @return No em analise, alterado ou nao.
* @throws Exception Se o elemento existir. * @throws Exception Se o elemento existir.
*/ */
private No inserir(int x, No i) throws Exception { private No inserir(int x, No i) throws Exception {
if (i == null) { if (i == null) {
i = new No(x); i = new No(x);
} else if (x < i.elemento) {
i.esq = inserir(x, i.esq);
} else if (x > i.elemento) {
i.dir = inserir(x, i.dir);
} else {
throw new Exception("Erro ao inserir!");
}
return i;
}
} else if (x < i.elemento) { /**
i.esq = inserir(x, i.esq); * Metodo publico para inserir elemento.
* @param x Elemento a ser inserido.
* @throws Exception Se o elemento existir.
*/
public void inserirPai(int x) throws Exception {
if(raiz == null){
raiz = new No(x);
} else if(x < raiz.elemento){
inserirPai(x, raiz.esq, raiz);
} else if(x > raiz.elemento){
inserirPai(x, raiz.dir, raiz);
} else {
throw new Exception("Erro ao inserirPai!");
}
}
} else if (x > i.elemento) { /**
i.dir = inserir(x, i.dir); * Metodo privado recursivo para inserirPai elemento.
* @param x Elemento a ser inserido.
} else { * @param i No em analise.
throw new Exception("Erro ao inserir!"); * @param pai No superior ao em analise.
} * @throws Exception Se o elemento existir.
*/
return i; private void inserirPai(int x, No i, No pai) throws Exception {
} if (i == null) {
if(x < pai.elemento){
/** pai.esq = new No(x);
* Metodo publico para inserir elemento. } else {
* @param x Elemento a ser inserido. pai.dir = new No(x);
* @throws Exception Se o elemento existir. }
*/ } else if (x < i.elemento) {
public void inserirPai(int x) throws Exception { inserirPai(x, i.esq, i);
if(raiz == null){ } else if (x > i.elemento) {
raiz = new No(x); inserirPai(x, i.dir, i);
} else if(x < raiz.elemento){ } else {
inserirPai(x, raiz.esq, raiz); throw new Exception("Erro ao inserirPai!");
} else if(x > raiz.elemento){ }
inserirPai(x, raiz.dir, raiz); }
} else {
throw new Exception("Erro ao inserirPai!");
}
}
/**
* Metodo privado recursivo para inserirPai elemento.
* @param x Elemento a ser inserido.
* @param i No em analise.
* @param pai No superior ao em analise.
* @throws Exception Se o elemento existir.
*/
private void inserirPai(int x, No i, No pai) throws Exception {
if (i == null) {
if(x < i.elemento){
pai.esq = new No(x);
} else {
pai.dir = new No(x);
}
} else if (x < i.elemento) {
inserirPai(x, i.esq, i);
} else if (x > i.elemento) {
inserirPai(x, i.dir, i);
} else {
throw new Exception("Erro ao inserirPai!");
}
}
/** /**
* Metodo publico iterativo para remover elemento. * Metodo publico iterativo para remover elemento.
* @param x Elemento a ser removido. * @param x Elemento a ser removido.
* @throws Exception Se nao encontrar elemento. * @throws Exception Se nao encontrar elemento.
*/ */
public void remover(int x) throws Exception { public void remover(int x) throws Exception {
raiz = remover(x, raiz); raiz = remover(x, raiz);
} }
/** /**
* Metodo privado recursivo para remover elemento. * Metodo privado recursivo para remover elemento.
* @param x Elemento a ser removido. * @param x Elemento a ser removido.
* @param i No em analise. * @param i No em analise.
* @return No em analise, alterado ou nao. * @return No em analise, alterado ou nao.
* @throws Exception Se nao encontrar elemento. * @throws Exception Se nao encontrar elemento.
*/ */
private No remover(int x, No i) throws Exception { private No remover(int x, No i) throws Exception {
if (i == null) { if (i == null) {
throw new Exception("Erro ao remover!"); throw new Exception("Erro ao remover!");
} else if (x < i.elemento) { } else if (x < i.elemento) {
i.esq = remover(x, i.esq); i.esq = remover(x, i.esq);
} else if (x > i.elemento) { } else if (x > i.elemento) {
i.dir = remover(x, i.dir); i.dir = remover(x, i.dir);
// Sem no a direita. // Sem no a direita.
} else if (i.dir == null) { } else if (i.dir == null) {
i = i.esq; i = i.esq;
// Sem no a esquerda. // Sem no a esquerda.
} else if (i.esq == null) { } else if (i.esq == null) {
i = i.dir; i = i.dir;
// No a esquerda e no a direita. // No a esquerda e no a direita.
} else { } else {
i.esq = maiorEsq(i, i.esq); i.esq = maiorEsq(i, i.esq);
} }
return i; return i;
} }
/** /**
* Metodo para trocar o elemento "removido" pelo maior da esquerda. * Metodo para trocar o elemento "removido" pelo maior da esquerda.
* @param i No que teve o elemento removido. * @param i No que teve o elemento removido.
* @param j No da subarvore esquerda. * @param j No da subarvore esquerda.
* @return No em analise, alterado ou nao. * @return No em analise, alterado ou nao.
*/ */
private No maiorEsq(No i, No j) { private No maiorEsq(No i, No j) {
// Encontrou o maximo da subarvore esquerda. // Encontrou o maximo da subarvore esquerda.
if (j.dir == null) { if (j.dir == null) {
i.elemento = j.elemento; // Substitui i por j. i.elemento = j.elemento; // Substitui i por j.
j = j.esq; // Substitui j por j.ESQ. j = j.esq; // Substitui j por j.ESQ.
// Existe no a direita. // Existe no a direita.
} else { } else {
// Caminha para direita. // Caminha para direita.
j.dir = maiorEsq(i, j.dir); j.dir = maiorEsq(i, j.dir);
} }
return j; return j;
} }
/** /**
* Metodo que retorna o maior elemento da árvore * Metodo que retorna o maior elemento da árvore
* @return int maior elemento da árvore * @return int maior elemento da árvore
*/ */
public int getMaior(){ public int getMaior(){
int resp = -1; int resp = -1;
if(raiz != null){
if(raiz != null){ No i;
No i; for(i = raiz; i.dir != null; i = i.dir);
for(i = raiz; i.dir != null; i = i.dir); resp = i.elemento;
resp = i.elemento; }
} return resp;
}
return resp;
}
/** /**
* Metodo que retorna o menor elemento da árvore * Metodo que retorna o menor elemento da árvore
* @return int menor elemento da árvore * @return int menor elemento da árvore
*/ */
public int getMenor(){ public int getMenor(){
int resp = -1; int resp = -1;
if(raiz != null){
if(raiz != null){ No i;
No i; for(i = raiz; i.esq != null; i = i.esq);
for(i = raiz; i.esq != null; i = i.esq); resp = i.elemento;
resp = i.elemento; }
} return resp;
}
return resp;
}
/** /**
* Metodo que retorna a altura da árvore * Metodo que retorna a altura da árvore
* @return int altura da árvore * @return int altura da árvore
*/ */
public int getAltura(){ public int getAltura(){
return getAltura(raiz, 0); return getAltura(raiz, 0);
} }
/**
* Metodo que retorna a altura da árvore
* @return int altura da árvore
*/
public int getAltura(No i, int altura){
if(i == null){
altura--;
} else {
int alturaEsq = getAltura(i.esq, altura + 1);
int alturaDir = getAltura(i.dir, altura + 1);
altura = (alturaEsq > alturaDir) ? alturaEsq : alturaDir;
}
return altura;
}
/** /**
* Metodo que retorna a altura da árvore * Metodo publico iterativo para remover elemento.
* @return int altura da árvore * @param x Elemento a ser removido.
*/ * @throws Exception Se nao encontrar elemento.
public int getAltura(No i, int altura){ */
if(i == null){ public void remover2(int x) throws Exception {
altura--; if (raiz == null) {
} else { throw new Exception("Erro ao remover2!");
int alturaEsq = getAltura(i.esq, altura + 1); } else if(x < raiz.elemento){
int alturaDir = getAltura(i.dir, altura + 1); remover2(x, raiz.esq, raiz);
altura = (alturaEsq > alturaDir) ? alturaEsq : alturaDir; } else if (x > raiz.elemento){
} remover2(x, raiz.dir, raiz);
return altura; } else if (raiz.dir == null) {
} raiz = raiz.esq;
} else if (raiz.esq == null) {
raiz = raiz.dir;
} else {
raiz.esq = maiorEsq(raiz, raiz.esq);
}
}
/**
* Metodo privado recursivo para remover elemento.
* @param x Elemento a ser removido.
* @param i No em analise.
* @param pai do No em analise.
* @throws Exception Se nao encontrar elemento.
*/
private void remover2(int x, No i, No pai) throws Exception {
if (i == null) {
throw new Exception("Erro ao remover2!");
} else if (x < i.elemento) {
remover2(x, i.esq, i);
} else if (x > i.elemento) {
remover2(x, i.dir, i);
} else if (i.dir == null) {
pai = i.esq;
} else if (i.esq == null) {
pai = i.dir;
} else {
i.esq = maiorEsq(i, i.esq);
}
}
/** public int getRaiz() throws Exception {
* Metodo publico iterativo para remover elemento. return raiz.elemento;
* @param x Elemento a ser removido. }
* @throws Exception Se nao encontrar elemento.
*/
public void remover2(int x) throws Exception {
if (raiz == null) {
throw new Exception("Erro ao remover2!");
} else if(x < raiz.elemento){
remover2(x, raiz.esq, raiz);
} else if (x > raiz.elemento){
remover2(x, raiz.dir, raiz);
} else if (raiz.dir == null) {
raiz = raiz.esq;
} else if (raiz.esq == null) {
raiz = raiz.dir;
} else {
raiz.esq = maiorEsq(raiz, raiz.esq);
}
}
/** public static boolean igual (ArvoreBinaria a1, ArvoreBinaria a2){
* Metodo privado recursivo para remover elemento. return igual(a1.raiz, a2.raiz);
* @param x Elemento a ser removido. }
* @param i No em analise.
* @param pai do No em analise.
* @throws Exception Se nao encontrar elemento.
*/
private void remover2(int x, No i, No pai) throws Exception {
if (i == null) {
throw new Exception("Erro ao remover2!");
} else if (x < i.elemento) {
remover2(x, i.esq, i);
} else if (x > i.elemento) {
remover2(x, i.dir, i);
} else if (i.dir == null) {
pai = i.esq;
} else if (i.esq == null) {
pai = i.dir;
} else {
i.esq = maiorEsq(i, i.esq);
}
}
public int getRaiz() throws Exception { private static boolean igual (No i1, No i2){
return raiz.elemento; boolean resp;
} if(i1 != null && i2 != null){
resp = (i1.elemento == i2.elemento) && igual(i1.esq, i2.esq) && igual(i1.dir, i2.dir);
} else if(i1 == null && i2 == null){
resp = true;
} else {
resp = false;
}
return resp;
}
public static boolean igual (ArvoreBinaria a1, ArvoreBinaria a2){ public int soma(){
return igual(a1.raiz, a2.raiz); return soma(raiz);
} }
private static boolean igual (No i1, No i2){ public int soma(No i){
boolean resp; int resp = 0;
if(i1 != null && i2 != null){ if(i != null){
resp = (i1.elemento == i2.elemento) && igual(i1.esq, i2.esq) && igual(i1.dir, i2.dir); resp = i.elemento;
} else if(i1 == null && i2 == null){ resp += soma(i.esq);
resp = true; resp += soma(i.dir);
} else { }
resp = false; return resp;
} }
return resp;
}
public int soma(){ public int quantidadePares(){
return soma(raiz); return quantidadePares(raiz);
} }
public int soma(No i){ public int quantidadePares(No i){
int resp = 0; int resp = 0;
if(i != null){ if(i != null){
resp = i.elemento + soma(i.esq) + soma(i.dir); resp = ((i.elemento % 2 == 0) ? 1 : 0);
} resp += quantidadePares(i.esq);
return resp; resp += quantidadePares(i.dir);
} }
return resp;
}
public int quantidadePares(){ public boolean hasDiv11(){
return quantidadePares(raiz); return hasDiv11(raiz);
} }
public int quantidadePares(No i){ public boolean hasDiv11(No i){
int resp = 0; boolean resp = false;
if(i != null){ if(i != null){
resp = ((i.elemento % 2 == 0) ? 1 : 0) + quantidadePares(i.esq) + quantidadePares(i.dir); resp = (i.elemento % 11 == 0) || hasDiv11(i.esq) || hasDiv11(i.dir);
} }
return resp; return resp;
} }
public boolean hasDiv11(){
return hasDiv11(raiz);
}
public boolean hasDiv11(No i){
boolean resp = false;
if(i != null){
resp = (i.elemento % 11 == 0) || hasDiv11(i.esq) || hasDiv11(i.dir);
}
return resp;
}
} }

View File

@ -1,28 +1,31 @@
/** /**
* No da arvore binaria * No da arvore binaria
* @author Max do Val Machado * @author Max do Val Machado
*/ */
class No { class No {
public int elemento; // Conteudo do no. public int elemento; // Conteudo do no.
public No esq, dir; // Filhos da esq e dir. public No esq, dir; // Filhos da esq e dir.
/** /**
* Construtor da classe. * Construtor da classe.
* @param elemento Conteudo do no. * @param elemento Conteudo do no.
*/ */
public No(int elemento) { public No(int elemento) {
this(elemento, null, null); this(elemento, null, null);
} }
/** /**
* Construtor da classe. * Construtor da classe.
* @param elemento Conteudo do no. * @param elemento Conteudo do no.
* @param esq No da esquerda. * @param esq No da esquerda.
* @param dir No da direita. * @param dir No da direita.
*/ */
public No(int elemento, No esq, No dir) { public No(int elemento, No esq, No dir) {
this.elemento = elemento; this.elemento = elemento;
this.esq = esq; this.esq = esq;
this.dir = dir; this.dir = dir;
} }
} }

View File

@ -3,32 +3,13 @@
* @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 {
ArvoreBinaria arvoreBinaria = new ArvoreBinaria(); ArvoreBinaria arvoreBinaria = new ArvoreBinaria();
for(int i=1; i<30; i++){
arvoreBinaria.inserir(3); arvoreBinaria.inserir(i);
arvoreBinaria.inserir(5); System.out.print("No. nos: " + i);
arvoreBinaria.inserir(1); System.out.print("\t Altura: " + arvoreBinaria.getAltura());
arvoreBinaria.inserir(8); System.out.println("\t log(2): " + Math.log(i)/Math.log(2));
arvoreBinaria.inserir(2); }
arvoreBinaria.inserir(4); }
arvoreBinaria.inserir(7);
arvoreBinaria.inserir(6);
System.out.println("Altura: " + arvoreBinaria.getAltura());
System.out.println("Menor valor: " + arvoreBinaria.getMenor());
System.out.println("Maior valor: " + arvoreBinaria.getMaior());
arvoreBinaria.caminharCentral();
arvoreBinaria.caminharPre();
arvoreBinaria.caminharPos();
arvoreBinaria.remover(6);
arvoreBinaria.remover(2);
arvoreBinaria.remover(4);
arvoreBinaria.caminharCentral();
arvoreBinaria.caminharPre();
arvoreBinaria.caminharPos();
}
} }

View File

@ -5,24 +5,24 @@
import java.util.*; import java.util.*;
public class Principal2 { public class Principal2 {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
ArvoreBinaria a = new ArvoreBinaria(); ArvoreBinaria a = new ArvoreBinaria();
Random gerador = new Random(); Random gerador = new Random();
gerador.setSeed(0); gerador.setSeed(0);
for(int i = 1; i <= 100000; i++){ for(int i = 1; i <= 100000; i++){
int valor; int valor;
do { do {
valor = Math.abs(gerador.nextInt()); valor = Math.abs(gerador.nextInt());
} while (a.pesquisar(valor) == true); } while (a.pesquisar(valor) == true);
a.inserir(valor); a.inserir(valor);
if(i % 1000 == 0){ if(i % 1000 == 0){
double log2 = (Math.log(i) / Math.log(2)); double log2 = (Math.log(i) / Math.log(2));
log2 *= 1.39; log2 *= 1.39;
System.out.println("Número de nós = " + i + " --- log(i,2) = " + log2 + " --- h = " + a.getAltura()); System.out.println("Número de nós = " + i + " --- log(i,2) = " + log2 + " --- h = " + a.getAltura());
} }
} }
} }
} }