Ola
Cara, em árvore não existe um “proximo” ou “fim”… mas sim direira/esquerda, ou maior/menor…
Sem querer me meter demais na sua implementação… mas acho que fica mais facil…
Metodo mais facil de fazer esta arvore é:
1-> Crie uma classe Denominada “No”, que pode ser um nó ou uma folha.
ela tem como atributos, o dado, no teu caso um int, e aponta para um outro “No” da direita e esquerda. Ela é um No quando a direita ou esquerda dela esta diferente de null, se os dois estiverem nulos ela é uma folha. ex.:
public class No{
private int dado;
private No maior;
private No menor;
public No(int dado){
this.dado = dado;
}
//get's e set's
}
2->para o caso de inserção, percorra a arvore até o o novo dado se “encaixe”, +/- assim:
public void addFolha(No no, int dado){
if(dado == no.getDado()){
throw new IllegalArgumentException("Nó já existe"); // para o caso de não poder ter dois nós iguais..
}
if(dado > no.getDado()){
if(no.getMaior() != null){
addFolha(no.getMaior(), dado);
return;
}else{
no.setMaior(new No(dado));
return;
}
}else{
// a mesma coisa do body do if acima.. mas usando o menor...
}
3-> pra vc verificar a profundidade da arvore fica mais facil… seguindo o mesmo raciocínio que vc usou…
public int getProfundidade(No no){
int profMaior = 0;
int profMenor = 0;
if(no.getMaior != null){
profMaior += getProfundidade(no.getMaior());
}
if(no.getMenor() != null){
profMenor += getProfundidade(no.getMenor());
}
if(profMaior > profMenor){
return profMaior;
}else{
return profMenor;
}
}
Sem querer mudar muito sua idéia inicial… mas vê o que vc pode aproveitar ae…