added AVL tree implementation