I don't understand the process. If you remove node 3, then wouldn't the next added node be the first available left child (of 1)? Why does the next added node go to 9 instead of 1? FYI, I added a helper method called printTree() to help troubleshoot. Another question: in all my methods, traversing the tree is basically duplicate code. Is there a way to pull this duplicate code out to another method and still retain the functionality of add(), remove(), getParent(), etc?