Understand when to choose a plain BST, a self-balancing tree, or a heap based on operation guarantees.
You need a data structure that guarantees O(log n) worst-case search, insertion, AND ordered (in-order) traversal of all elements. Which structure best fits, and why do the alternatives fall short?