Problema com busca em arvore binaria!

Ola eu estou com o seguinte problema naum esta dando certo minha busca na arvore abaixo!!!

public TreeNode buscaBin(TreeNode r, long valor) //metodo que faz busca na arvore binaria { if(r == null) return null; if(valor == r.getDado()) return r; if(valor < r.getDado()) return(buscaBin(r.getEsq(),valor)); else return(buscaBin(r.getDir(),valor)); }

[code]class TreeNode
{
// membros de acesso de pacote
TreeNode leftNode; // nó esquerdo
int data; // valor do nó
TreeNode rightNode; // nó direito

// construtor inicializa os dados e os torna um nó-folha
public TreeNode( int nodeData )
{
data = nodeData;
leftNode = rightNode = null; // o nó não tem nenhum filho
} // fim construtor sem argumento TreeNode

// localiza ponto de inserção e insere novo nó; ignora os valores duplicados
public void insert( int insertValue )
{
// insere na subárvore esquerda
if ( insertValue < data )
{
// insere novo TreeNode
if ( leftNode == null )
leftNode = new TreeNode( insertValue );
else // continua percorrendo subárvore esquerda
leftNode.insert( insertValue );
} // fim do if
else if ( insertValue > data ) // insere na subárvore direita
{
// insere novo TreeNode
if ( rightNode == null )
rightNode = new TreeNode( insertValue );
else // continua percorrendo subárvore direita
rightNode.insert( insertValue );
} // fim de else if
} // fim do método insert
} // fim da classe TreeNode

// definição da classe Tree
class Tree
{
private TreeNode root;
private int cont;

// construtor inicializa uma Tree de inteiros vazia
public Tree()
{
root = null;
cont=0;
} // fim construtor sem argumento Tree

// insere um novo nó na árvore de pesquisa binária
public void insertNode( int insertValue )
{
if ( root == null )
root = new TreeNode( insertValue ); // cria o nó raiz aqui
else
root.insert( insertValue ); // chama o método insert
} // fim do método insertNode

// inicia percurso na pré-ordem
public void preorderTraversal()
{
preorderHelper( root );
System.out.println(" A quantidade de nós: "+cont);
} // fim do método preorderTraversal

// método recursivo para realizar percurso na pré-ordem
private void preorderHelper( TreeNode node )
{
if ( node == null )
return;
System.out.printf( "%d ", node.data ); // gera saída de dados do nó
preorderHelper( node.leftNode ); // percorre subárvore esquerda
preorderHelper( node.rightNode ); // percorre subárvore direita
cont++;
} // fim do método preorderHelper

// inicia percurso na ordem
public void inorderTraversal()
{
inorderHelper( root );
} // fim do método inorderTraversal

// método recursivo para realizar percurso na ordem
private void inorderHelper( TreeNode node )
{
if ( node == null )
return;

  inorderHelper( node.leftNode );        // percorre subárvore esquerda
  System.out.printf( "%d ", node.data ); // gera saída de dados do nó
  inorderHelper( node.rightNode );       // percorre subárvore direita

} // fim do método inorderHelper

// inicia percurso na pós-ordem
public void postorderTraversal()
{
postorderHelper( root );
} // fim do método postorderTraversal

// método recursivo para realizar percurso na pós-ordem
private void postorderHelper( TreeNode node )
{
if ( node == null )
return;

  postorderHelper( node.leftNode );      // percorre subárvore esquerda
  postorderHelper( node.rightNode );     // percorre subárvore direita
  System.out.printf( "%d ", node.data ); // gera saída de dados do nó

} // fim do método postorderHelper
public TreeNode buscaBin(TreeNode r, long valor) //metodo que faz busca na arvore binaria
{
if(r == null)
return null;
if(valor == r.getDado())
return r;
if(valor < r.getDado())
return(buscaBin(r.getEsq(),valor));
else
return(buscaBin(r.getDir(),valor));
}
} // fim da classe Tree
[/code]

[code]// definição da classe Tree
class Tree
{
private TreeNode root;
private int cont;

// construtor inicializa uma Tree de inteiros vazia
public Tree()
{
root = null;
cont=0;
} // fim construtor sem argumento Tree

// insere um novo nó na árvore de pesquisa binária
public void insertNode( int insertValue )
{
if ( root == null )
root = new TreeNode( insertValue ); // cria o nó raiz aqui
else
root.insert( insertValue ); // chama o método insert
} // fim do método insertNode

// inicia percurso na pré-ordem
public void preorderTraversal()
{
preorderHelper( root );
System.out.println(" A quantidade de nós: "+cont);
} // fim do método preorderTraversal

// método recursivo para realizar percurso na pré-ordem
private void preorderHelper( TreeNode node )
{
if ( node == null )
return;
System.out.printf( "%d ", node.data ); // gera saída de dados do nó
preorderHelper( node.leftNode ); // percorre subárvore esquerda
preorderHelper( node.rightNode ); // percorre subárvore direita
cont++;
} // fim do método preorderHelper

// inicia percurso na ordem
public void inorderTraversal()
{
inorderHelper( root );
} // fim do método inorderTraversal

// método recursivo para realizar percurso na ordem
private void inorderHelper( TreeNode node )
{
if ( node == null )
return;

  inorderHelper( node.leftNode );        // percorre subárvore esquerda
  System.out.printf( "%d ", node.data ); // gera saída de dados do nó
  inorderHelper( node.rightNode );       // percorre subárvore direita

} // fim do método inorderHelper

// inicia percurso na pós-ordem
public void postorderTraversal()
{
postorderHelper( root );
} // fim do método postorderTraversal

// método recursivo para realizar percurso na pós-ordem
private void postorderHelper( TreeNode node )
{
if ( node == null )
return;

  postorderHelper( node.leftNode );      // percorre subárvore esquerda
  postorderHelper( node.rightNode );     // percorre subárvore direita
  System.out.printf( "%d ", node.data ); // gera saída de dados do nó

} // fim do método postorderHelper
private TreeNode buscaBin(TreeNode r, long valor) //metodo que faz busca na arvore binaria
{
if(r == null)
return null;
if(valor == r.getDado())
return r;
if(valor < r.getDado())
return(buscaBin(r.getEsq(),valor));
else
return(buscaBin(r.getDir(),valor));
}
// INICIO DA ALTERAÇÃO
public long find(long valor) //metodo que faz busca na arvore binaria
{
long result = 0;

   // Procura a chave na arvore
  TreeNode node = buscaBin(this.root, valor);
  
  // Se achar algum nó, obtem o conteúdo
  if( node != null ) {  
    result = node.getDado();
  }
  
  return result;

}

public static void main(String[] args) {
Tree tree = new Tree();
tree.insertNode(10);
tree.insertNode(2);
tree.insertNode(30);
tree.insertNode(4);
tree.insertNode(50);
tree.insertNode(62);

   System.out.println(tree.find(2));

}
// FIM DA ALTERAÇÃO

} // fim da classe Tree
[/code]

Foi incluido o método find para encontrar o nó desejado e o método main para fazer o teste.

Faltou criar um método (find) que dispare a leitura da àrvore através da passagem do nó inicial (raiz) - no seu caso o root.

Como os nós apenas registram a chave ( data ) o método de busca volta sempre o mesmo valor que está sendo procurado, quando não encontra irá retornar o valor zero.

flws