Pessoal estou com este problema !!!
tenho que criar um método que conte os nós da árvore… usando um dos métodos de caminhamento (Inorder, preorder e postorder)…
:roll: Porém disponibilizaram este código.
import java.io.*;
public class Leitura {
public int LerInteiro() {
int i=0;
boolean b=true;
BufferedReader input = new BufferedReader ( new InputStreamReader(System.in));
while (b) {
try {
String s = input.readLine();
i = Integer.valueOf(s.trim()).intValue();
b=false;
}
catch (Exception e) {
System.out.println("Erro... insira um inteiro valido..."+e);
}
}
return i;
}
}
class No
{
int valor;
public No p_Esq;
public No p_Dir;
public No(int valor)
{
this.valor = valor;
this.p_Esq = null;
this.p_Dir = null;
}
int ObtemValor()
{
return this.valor;
}
void DefineValor(int novo)
{
this.valor = novo;
}
}
class ArvoreBinaria
{
private No raiz;
int conta, soma;
int maior = 0;
int menor = [telefone removido]; //maxint
//construtor
public ArvoreBinaria()
{
this.raiz = null;
}
public No ObtemRaiz()
{
return this.raiz;
}
public void InsOrd(int novo)
{
No n = new No(novo);
this.raiz = this.Insere(n, this.raiz);
}
private No Insere(No novo, No inicio)
{
If (inicio != null)
{
If (novo.ObtemValor() < inicio.ObtemValor())
inicio.p_Esq=this.Insere(novo, inicio.p_Esq);
else
inicio.p_Dir=this.Insere(novo, inicio.p_Dir);
return inicio;
}
else
return novo;
}
// Ordem crescente
public void ImprimirCrescente(No raiz)
{
If (raiz != null)
{
this.ImprimirCrescente(raiz.p_Esq);
System.out.print(raiz.ObtemValor() + ", ");
this.ImprimirCrescente(raiz.p_Dir);
}
}
// Ordem decrescente
public void ImprimirDecrescente(No raiz)
{
If (raiz != null)
{
this.ImprimirDecrescente(raiz.p_Dir);
System.out.print(raiz.ObtemValor() + ", ");
this.ImprimirDecrescente(raiz.p_Esq);
}
}
public int ContaElementos(No raiz)
{
If (raiz != null)
{
conta=this.ContaElementos(raiz.p_Esq)+this.ContaElementos(raiz.p_Dir)+1;
return conta;
}
else
return 0;
}
public int SomaElementos(No raiz)
{
If (raiz != null)
{
soma=this.SomaElementos(raiz.p_Esq)+this.SomaElementos(raiz.p_Dir)+raiz.ObtemValor();
return soma;
}
else
return 0;
}
public int MaiorElemento(No raiz)
{
If (raiz != null)
{
if (maior < raiz.ObtemValor())
maior = raiz.ObtemValor();
this.MaiorElemento(raiz.p_Esq);
this.MaiorElemento(raiz.p_Dir);
return maior;
}
else
return 0;
}
public int MenorElemento(No raiz)
{
If (raiz != null)
{
if (menor > raiz.ObtemValor())
menor = raiz.ObtemValor();
this.MenorElemento(raiz.p_Esq);
this.MenorElemento(raiz.p_Dir);
return menor;
}
else
return 0;
}
} // fim da classe
class InterfaceTesteA
{
public InterfaceTesteA()
{
boolean b = true;
int i;
Leitura oleitura = new Leitura();
ArvoreBinaria oArvore = new ArvoreBinaria();
while ( b ) { // se b=0 então terminar
i = oleitura.LerInteiro();
if (i == 0)
b = false;
else
{
oArvore.InsOrd(i);
System.out.println("Ordem Crescente:");
oArvore.ImprimirCrescente(oArvore.ObtemRaiz());
System.out.println();
System.out.println("Ordem Decrescente:");
oArvore.ImprimirDecrescente(oArvore.ObtemRaiz());
System.out.println();
int conta = oArvore.ContaElementos(oArvore.ObtemRaiz());
System.out.println("Elementos: " + conta);
int soma = oArvore.SomaElementos(oArvore.ObtemRaiz());
System.out.println("Soma dos Elementos: " + soma);
int maior = oArvore.MaiorElemento(oArvore.ObtemRaiz());
System.out.println("Elemento Maior: " + maior);
int menor = oArvore.MenorElemento(oArvore.ObtemRaiz());
System.out.println("Elemento Menor: " + menor);
}
}
}
public static void main(String Args[])
{
new InterfaceTeste();
}
} //fim da classe
O melhor de tudo é que não sei por onde começar.
PESSOAL EU REALMENTE TO LASCADO … Pois não manjo muito de JAVA.