A full bst means that every node except the final row has 2 children. A balanced tree means that no node that is not a parent is more than 1 node deeper than another node that isn't a parent. There's a few types of self balancing trees that you can use. I've implemented an AVL tree in my data structures class. There's also a few more (a red-black tree for example, though I'm not familiar with the implementation). Once you get beyond the study of them though you just send them your data and don't worry about it (since all binary trees are still searched the same way, they just add in elements in different manners).