A plain binary tree gives no help when searching, so finding a value means checking every node. A binary search tree keeps smaller values on the left and larger on the right, so search, insert and delete take O(h) time. Use it when you need sorted data that changes often, which is how TreeMap and TreeSet work in Java. Inserting sorted data into a plain BST makes a chain and O(n) operations, which is why real libraries use self-balancing trees.