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á.