Hi,
As you might have learned, a BST is defined recursively, i.e., its definition is something like 'A Binary Tree is an entity storing some value, and having two associated trees (say, left tree and right tree). A BST is a Binary Tree having some convention between the value and left & child sub-trees. For example, value of left-subtree will always be less than the value of tree, and that of right-subtree will always be greater.'
Hope I'm making sense.
So, applying this, we can write a simple BST as below:
The same approach can be taken for 'remove' method. Also, as you might have guessed, incorporating level-count, returning sub-trees, maintaing node-count etc. are quite easier with this approach.
Downside - It uses recursion. I personally try to avoid it.
Practically, all your assignments can be smoothely done, as they don't need a huge amount of memory-storage for each recursive call.