Fully implement BST (untested)