Quero fazer uma árvore binária simples. Ja tinha feito uma em C, mas estou tendo problemas em fazer em Java. Pelo que entendi, o problema esta ocorrendo no método insertNode. Quando o programa sai desse metodo, a raiz continua null.
private void insertNode(Node r, Node no){
if(r==null && no!=null){
r=new Node(new Pessoa(no.getPessoa().getNome(),no.getPessoa().getId()));
}
else{
if(r.getPessoa().getNome().compareToIgnoreCase(no.getPessoa().getNome())<0){
System.out.println("Esquerda");
insertNode(r.getLNode(),no);
}
else{
if(r.getPessoa().getNome().compareToIgnoreCase(no.getPessoa().getNome())>0){
System.out.println("Direita");
insertNode(r.getRNode(),no);
}
}
}
}
o código completo do programa é o seguinte:
class Pessoa{
private String nome;
private int id;
public Pessoa(String n, int i){
nome=n;
id=i;
}
public String getNome(){
return nome;
}
public int getId(){
return id;
}
public String toString(){
return nome+" : "+String.valueOf(id);
}
}
class Node{
private Node lNode;
private Node rNode;
private Pessoa p;
public Node(){
lNode=null;
rNode=null;
}
public Node(Pessoa pes){
p=pes;
lNode=null;
rNode=null;
}
public void lAdd(Node no){
lNode=no;
}
public void rAdd(Node no){
rNode=no;
}
public Pessoa getPessoa(){
return p;
}
public Node getRNode(){
return rNode;
}
public Node getLNode(){
return lNode;
}
public String toString(){
return p.toString()+" d:"+rNode+" e:"+lNode;
}
}
class Arvore{
private Node raiz;
public Arvore(){
}
public boolean raizNull(){
//retorna true se a raiz é null
if(raiz==null)
return true;
else
return false;
}
public void add(Pessoa p){
Node noTmp=new Node(p);
insertNode(raiz,noTmp);
}
public void setNode(Node n1, Node n2){
n1=n2;
}
public void add(Node no){
if(raizNull()==true)
this.setNode(raiz, no);
else
insertNode(raiz,no);
}
private void insertNode(Node r, Node no){
if(r==null && no!=null){
r=new Node(new Pessoa(no.getPessoa().getNome(),no.getPessoa().getId()));
}
else{
if(r.getPessoa().getNome().compareToIgnoreCase(no.getPessoa().getNome())<0){
System.out.println("Esquerda");
insertNode(r.getLNode(),no);
}
else{
if(r.getPessoa().getNome().compareToIgnoreCase(no.getPessoa().getNome())>0){
System.out.println("Direita");
insertNode(r.getRNode(),no);
}
}
}
}
public Pessoa procura(String n){
return find(raiz,n);
}
private Pessoa find(Node no,String n){
if(no==null)
return null;
else{
if(no.getPessoa().getNome().compareToIgnoreCase(n)<0)
return find(no.getLNode(),n);
if(no.getPessoa().getNome().compareToIgnoreCase(n)>0)
return find(no.getRNode(),n);
if(no.getPessoa().getNome().compareToIgnoreCase(n)==0)
return no.getPessoa();
}
return null;
}
public void imprime(){
printTree(raiz);
}
private void printTree(Node n){
if(n!=null){
printTree(n.getRNode());
System.out.println(n.getPessoa().toString());
printTree(n.getLNode());
}
}
}
public class JArvoreBinaria {
public static void main(String[] args) {
Arvore tree=new Arvore();
Pessoa p[]=new Pessoa[7];
p[0]=new Pessoa("Carlos",10);
p[1]= new Pessoa("Joao",01);
p[2]= new Pessoa("Maria", 02);
p[3]= new Pessoa("Vermilion", 03);
p[4]= new Pessoa("Jose", 04);
p[5]= new Pessoa("Paty", 05);
p[6]= new Pessoa("Ana",06);
for(int i=0;i<=6;i++){
tree.addIt(new Node(p[i]));
}
Pessoa p7=tree.procura("teste");
if(p7!=null)
System.out.println(p7.toString());
else
System.out.println("\nNao achou");
tree.imprime();
}
}
Alguem poderia, por favor, me dizer onde está meu erro? Porque o elemento não é inserido na árvore?
Agradeço desde já.
Ricardo Farinhaki