private void pushDown(Node root) {
        if(root == null){
            return;
        }
        // find a child with non zero node value
        if (root.left == null && root.right == null) {
            // already leaf node. nothing to do. just return
            return;
        }

        //if root left is not null and root left data is not 0 pick it to swap
        if (root.left != null && root.left.data >= 0) {
            int temp = root.data;
            root.data = root.left.data;
            root.left.data = temp;
            pushDown(root.left);
        }
        else if(root.right != null && root.right.data >= 0){
            int temp = root.data;
            root.data = root.right.data;
            root.right.data = temp;
            pushDown(root.right);
        }
    }
http://www.careercup.com/question?id=5344154741637120
src/com/interview/tree/SinkNegativeToBottom.java