- on templates
- with copy/move constructors and assignment operators
- insertion
- deletion
- search (returning a pointer to a node)
- find (iterative and recursive)
- minimum/maximum value in the tree
- depth
- print (inorder, preorder, postorder and with overloaded output operator)
- size/isEmpty
- auxiliary functions to copy nodes, delete nodes, swap roots and find parent of a node