Arvore Costurada - JAVA
/* * AUTOR: * * ROBERTO QUEIROZ * */
public class Arvore {
No raiz;
/** * METODO CONSTRUTOR DA CLASSE */ // public Arvore() { // // raiz = new No(); // raiz.setDireita(raiz); // raiz.setEsquerda(raiz); // raiz.setCosturaesq(true); // raiz.setChave(Integer.MAX_VALUE); // // } /* * METODO INSERIR */ public void inserir(int valor) {
if(raiz == null) {
//CRIANDO A RAIZ (INSERINDO O PRIM ELEMENTO) raiz = new No(); raiz.setDireita(raiz); // PONTEIRO DIREITO raiz.setEsquerda(raiz); // PONTEIRO ESQUERDO raiz.setCosturaesq(true); //um elemento sozinho sempre tem costura - COSTURA ESQ = TRUE raiz.setCosturadir(true); // COSTURA DIREITA = TRUE raiz.setChave(valor); //GRAVANDO O VALOR NA RAIZ System.out.println("Inserido [" + valor + "] na Raiz!"); } else { No p = raiz; // (P É UM TEMPORARIO)
for (;;) {
if (p.getChave() < valor) { //COMPARAÇÃO DO VALOR A SER INSERIDO COM O VALOR RAIZ
if (p.ehCosturadir()) { // SE É TRUE, ESSA RAIZ TEM COSTURA PELA DIR, OU SEJA , HÁ // VAGA PARA INSERÇÃO E SERA INSERIDO LA. break; //SAIU DO FOR } /* p vai receber o proximo da direita*/ p = p.getDireita(); //TORNA O FILHO DIREITO UMA "RAIZ"
} else if (p.getChave() > valor) { /* Se o valor verdadeiro continua... se for falso sai do for */ if (p.ehCosturaesq()) { break; } /* p vai receber o proximo da esquerda*/ p = p.getEsquerda(); } else { System.out.println("Elemento já existe"); return;
}
} //criando um NO que vai receber o valor inserido No no = new No(); // setando o valor no NÓ no.setChave(valor); /* Boleanos da costura recebem verdadeiro pois * sao folhas e terão costuras */ no.setCosturadir(true); no.setCosturaesq(true); /* * P É O ELEMENTO QUE