Duvida sobre inserção em uma QuadTree

0 respostas
java
A

Olá, estou trabalhando em um exercício para a faculdade e estou com dificuldades. O problema é o seguinte:

Preciso criar uma arvore a partir de uma entrada .txt (8 cbccbpbpcpbpbcbpbpbccbpbpbcbpbpcpbpbcbbbp), onde 8 é o tamanho da matriz e os demais elementos são os inputs.

b: informa que a célula deve ser pintada de branco.
p: informa que a célula deve ser pintada de preto.
c: informa que existe branco e preto dentro da célula e por isso ela deve ser dividida mais vezes. A divisão da matriz é feita em 4 partes ( Quadrante 1, 2,3 ,4) e as partes são numeradas como mostra a figura abaixo. A sequência de quebras forma uma árvore de divisões, e a codificação das partes é feita logo após a codificação da célula.

Eis meu problema: O meu método de inserção não funciona como deveria, eu não consigo fazer com que ele suba a arvore uma vez que chegue ao quadrante 4. Ou seja, eu consigo adicionar CBCCBPBP e então a arvore para, pois não consigo subir a arvore para continuar e adicionando os demais elementos. O que tem de errado no meu método de inserção?

Classe Main:
(No momento o txt que a main esta lendo é “8 cbccbpbpcpbpbcbpbpbccbpbpbcbpbpcpbpbcbbbp”)

public static void main(String args[]) {

Arvore a = new Arvore();
    int somaPretos = 0;
    String somas = null;
    String[] tamanhoBloco = null;
    int tamanhoB;
    String nomearquivo = "Caso text"; // Nome do arquivo.
    try {
        File file = new File("H:/netbeans/Trabajo/src/1.txt");
        bufferedReader = new BufferedReader(new FileReader(file));
        String line = null;

        char digitoNode;
        while ((line = bufferedReader.readLine()) != null) {
            tamanhoBloco = line.split(" "); // tamanho PX

            line = line.trim(); // retira espaços

            for (int i = 2; i < line.length(); i++) {
                digitoNode = line.charAt(i);
                //System.out.println(digitoNode);
                a.inserir(digitoNode);
            }
        }
    } catch (Exception e) {
        System.err.println("Erro na abertura do arquivo: " + nomearquivo);
    }

Classe da Arvore:

public class Arvore2 {

private Node raiz;
private int tamImagem;
private String chave;
private int indiceCorrente;

public boolean isEmpty() {

    if (raiz == null) {
        return true;
    }
    return false;
}

public void inserir(char valor) {
    if (raiz == null) {
        raiz = new Node(valor);
    } else {
        inserir(raiz, valor);
    }
}

public void inserir(Node root, char valor) {

    if (root.q1 != null) {															// *** QUADRANTE 1 ***
        if (root.q1.elemento == 'c') {
            inserir(root.q1, valor);
        } else if (root.q2 != null) {
            if (root.q2.elemento == 'c') {
                inserir(root.q2, valor);
            } else if (root.q3 != null) {
                if (root.q3.elemento == 'c') {
                    inserir(root.q3, valor);
                } else if (root.q4 != null) {											// *** QUADRANTE 4 ***
                    if (root.q4.elemento == 'c') {
                        inserir(root.q4, valor);
                    }
                } else {
                    root.q4 = new Node(valor);
                }
            } else {
                root.q3 = new Node(valor);
            }
        } else {
            root.q2 = new Node(valor);
        }
    } else {
        root.q1 = new Node(valor);
    }
}

public void imprimirArvore() {
    if (raiz == null) {
        System.out.println("Árvore vazia");
    } else {
        imprimirArvore(raiz);
    }
}

private void imprimirArvore(Node node) {
    if (node == null) {
        System.out.print("?");
        return;
    }
    System.out.print("." + node.elemento);

    if (node.elemento == 'c') {
        // if(node.getQuadrante1() != null){
        imprimirArvore(node.getQuadrante1());
        // }

        // if(node.getQuadrante2() != null){
        imprimirArvore(node.getQuadrante2());
        //  }

        //  if(node.getQuadrante3() != null){
        imprimirArvore(node.getQuadrante3());
        //  }

        //(node.getQuadrante4() != null){
        imprimirArvore(node.getQuadrante4());
        //  }
        //System.out.println("Node: " + node.elemento);
    }
}

private static class Node {

    private char elemento;
    private Node pai;
    private Node q1, q2, q3, q4;

    public Node(char elem) {
        elemento = elem;
        pai = null;
        q1 = null;
        q2 = null;
        q3 = null;
        q4 = null;

    }

    public void setElemento(char elemento) {
        this.elemento = elemento;
    }

    public void setPai(Node pai) {
        this.pai = pai;
    }

    public void setQuadrante1(Node quadrante1) {
        this.q1 = quadrante1;
    }

    public void setQuadrante2(Node quadrante2) {
        this.q2 = quadrante2;
    }

    public void setQuadrante3(Node quadrante3) {
        this.q3 = quadrante3;
    }

    public void setQuadrante4(Node quadrante4) {
        this.q4 = quadrante4;
    }

    public char getElemento() {
        return elemento;
    }

    public Node getQuadrante1() {
        return q1;
    }

    public Node getQuadrante2() {
        return q2;
    }

    public Node getQuadrante3() {
        return q3;
    }

    public Node getQuadrante4() {
        return q4;
    }

}

}

Agradeço desde já.

Criado 19 de maio de 2016
Respostas 0
Participantes 1