public Node upsideDownBinaryTree(Node root, Node parent, Node rightChild) {
        if (root == null) {
            return parent;
        }
        Node left = root.left;
        Node right = root.right;

        root.right = parent;
        root.left = rightChild;

        return upsideDownBinaryTree(left, root, right);
    }
Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that
shares the same parent node) or empty, flip it upside down and turn it into a tree where the original
right nodes turned into left leaf nodes. Return the new root.

https://leetcode.com/problems/binary-tree-upside-down/
src/com/interview/tree/UpsidedownBinaryTree.java