starting generic BST implementation