Я не знаю точно, что вы делаете с этим циклом while.
while (curr != NULL){//I think this is wrong
if ((curr -> left) == NULL){
curr = curr -> right; // Why to go right here?!, isn't this an empty node?
}
else{
curr = curr -> left;
}
}
Если я ищу ближайший пустой (NULL) левый узел, я сделаю это
while (curr != NULL){
if ((curr -> left) == NULL){//The left node is NULL. Great, I found empty node.
curr = NULL;
}
else{ //hmmm, left node is not empty. Lets go left for more nodes.
curr = curr -> left;
}
}
Но вот так поиск будет идти только влево. после некоторых вставок дерево не будет сбалансировано.
Если вы дадите больше подробностей, это будет более понятным.