CLASSE NO
public class No<GENERICO>{
private GENERICO valor;
private No<GENERICO> esquerda;
private No<GENERICO> direita;
public No(GENERICO novoValor){
this.valor = novoValor;
this.esquerda = null;
this.direita = null;}
public GENERICO getValor(){
return valor; }
public void setValor(GENERICO valor){
this.valor = valor; }
public No<GENERICO> getEsquerda(){
return esquerda;}
public void setEsquerda(No<GENERICO> esquerda){
this.esquerda = esquerda;}
public No<GENERICO> getDireita(){
return direita;}
public void setDireita(No<GENERICO> direita){
this.direita = direita;}}
CLASSE MAIN
public class Main {
public static void main(String[] args) {
System.out.println("-----------------------------QUESTÃO A----------------------------------------------");
Arvore<Integer> arvoreA = new Arvore<Integer>();
arvoreA.inserir(6);
arvoreA.inserir(10);
arvoreA.inserir(11);
arvoreA.inserir(12);
arvoreA.inserir(8);
arvoreA.inserir(9);
arvoreA.inserir(7);
arvoreA.inserir(2);
arvoreA.inserir(4);
arvoreA.inserir(1);
arvoreA.inserir(3);
arvoreA.inserir(5);
System.out.println("\n\n RESPOSTA A: O número de folhas é igual a " + arvoreA.contadorNoEsqerdo() + "\n");
System.out.println("-----------------------------QUESTÃO B----------------------------------------------");
Arvore<Integer> arvoreB = new Arvore<Integer>();
arvoreB.inserir(555);
arvoreB.inserir(333);
arvoreB.inserir(111);
arvoreB.inserir(444);
arvoreB.inserir(888);
arvoreB.inserir(999);
System.out.println("\n\n RESPOSTA B: Impressão da Árvore\n");
arvoreB.preOrdem(arvoreB.getRaiz(),"");}}
CLASSE ARVORE
import java.util.*;
public class Arvore<GENERICO extends Comparable> {
private No<GENERICO> raiz;
private int nEsquerdaNo;
static String defaultSpaces = " ";
static String Spaces = " ";
public Arvore() {
this.raiz = null;}
public void inserir(GENERICO valor) {
No<GENERICO> novoNo = new No<GENERICO>(valor);
if (raiz == null) {
this.raiz = novoNo;
} else {
No<GENERICO> atual = this.raiz;
while (true) {
if (novoNo.getValor().compareTo(atual.getValor()) == -1) {
// 0 para igual, -1 para menor e 1 maior
if (atual.getEsquerda() != null) {
atual = atual.getEsquerda();
} else {
atual.setEsquerda(novoNo);
break;}
} else {
if (atual.getDireita() != null) {
atual = atual.getDireita();} else {
atual.setDireita(novoNo);
break;}}}} }
public No<GENERICO> getRaiz() {
return raiz;}
public void emOrdem(No<GENERICO> atual) {
if (atual != null) {
emOrdem(atual.getEsquerda());
System.out.println(atual.getValor());
emOrdem(atual.getDireita());} }
// QUESTÃO A
private void dfs(No<GENERICO> no) {
if (no == null)
return;
No<GENERICO> esquerda = no.getEsquerda();
if (esquerda != null) {
nEsquerdaNo++;
dfs(esquerda);}
dfs(no.getDireita());}
public int contadorNoEsqerdo() {
nEsquerdaNo = 0;
dfs(raiz);
return nEsquerdaNo; }
// QUESTÃO B
public void preOrdem(No<GENERICO> atual, String spaces) {
System.out.print(spaces);
if (atual != null) {
if ((atual.getEsquerda() != null) && (atual.getDireita() != null)) {
System.out.println(atual.getValor());
preOrdem(atual.getEsquerda(), spaces + defaultSpaces);
preOrdem(atual.getDireita(), spaces + defaultSpaces);
} else {
if ((atual.getEsquerda() != null) && (atual.getDireita() == null)) {
System.out.println(atual.getValor());
System.out.println(spaces + defaultSpaces + "-");
preOrdem(atual.getEsquerda(), spaces + defaultSpaces);
} else {
if ((atual.getEsquerda() == null) && (atual.getDireita() != null)) {
System.out.println(atual.getValor());
System.out.println(spaces + defaultSpaces + "-");
preOrdem(atual.getDireita(), spaces + defaultSpaces);
} else {
System.out.println(atual.getValor());
System.out.println(spaces + defaultSpaces + "-");
System.out.println(spaces + defaultSpaces + "-");
}}}}}}