Binary Search tree deletion optimization
You are always returning true so I guess you don't really need current return value. In that case you might want to try a bit different approach.
You want to do something like:

 if( data &lt; node.key) {
    node.left = deleteNode(data, node.left);
 } else if( data &gt; node.key) {
    node.right = deleteNode(data, node.right);
 } else {
    //here return resulting node after deletion, null if node had no children
 }


That way you don't need to know anything about parent