Olá galera!
Eu tenho que fazer umas inserções em uma árvore binária de busca [método insert()]. Depois, faço uma busca [método search()]. Problema o método search() não encontra certos elementos quando o método insert() é implementado de forma iterativa. Quando este é implementado de forma recursiva o método search() é capaz de achar qualquer elemento. Conclusão: o problema está no insert().
Mas onde?!? Alguém poderia me ajudar? Obrigado! 
/*
*Estou levando em conta o código de hash pra comparar as strings.
*Isso mesmo, estou inserindo strings!! :D
*/
public void insert()
{
TreeNode q, p; //o que vai na frente e o que fica pra guardar a posição
q = p = this.getRoot();
if(this.getRoot() == null) //se árvore vazia
{
this.setRoot(data); //insere na raiz
}
else //senão
{
//enquanto não topar com nada igual nem com nada vazio
while((data.toString().hashCode() != q.getData().toString().hashCode()) && (p != null))
{
q = p;
//se o que se quer pôr é menor que o que tá lá
if(data.toString().hashCode() < p.getData().toString().hashCode())
{
p = q.getLeft(); //p vai pra esquerda
}
else
{
p = q.getRight(); //p vai pra direita
}
} //fim while
//tá aqui então é porque achou o lugar pra colocar
//se for menor
if(data.toString().hashCode() < q.getData().toString().hashCode())
{
//põe na esquerda
q.setLeft(new TreeNode(data));
}
else //senão
{
//põe na direita
q.setRight(new TreeNode(data));
}
} //fim else maior
} //fim insert