Consider this Java Tips - Binary Search Tree Implementation in Java
Why do you have so many classes? For example, what's the difference between your tree class and node class? Isn't it like having a class for a list and a class for a node? I may be wrong, but that's my initial impression. Could you explain your assignment?