Quite sense tree for testing
Recrusion removal node with two children. Via wiki:

There are three possible cases to consider:

    Deleting a leaf (node with no children): Deleting a leaf is easy, as we can simply remove it from the tree.
    Deleting a node with one child: Remove the node and replace it with its child.
    Deleting a node with two children: Call the node to be deleted N. Do not delete N. Instead, choose either its in-order successor node or its in-order predecessor node, R. Copy the value of R to N, then recursively call delete on R until reaching one of the first two cases.

Broadly speaking, nodes with children are harder to delete. As with all binary trees, a node's in-order successor is its right subtree's left-most child, and a node's in-order predecessor is the left subtree's right-most child. In either case, this node will have zero or one children. Delete it according to one of the two simpler cases above.
http://en.wikipedia.org/wiki/Binary_search_tree#Deletion
Allow to remove root
Removing bst tree from right child