public void recursivePrint(TreeNode root, int parentPosition, Node innerNode, Node p, int i) {
        Node innerParent;
        int position;

        if (root != null) {

            int height = heightRootToNode(root);
            int nextTop = getRectNextTop(height);

            if (innerNode != null)
                innerParent = innerNode;
            else
                innerParent = p;

            if (root.parent.left != null && root.parent.left.equals(root)) {
                position = getRectNextLeft(parentPosition, height);
                innerNode = makeNode(String.valueOf(root.key), new Point(position, nextTop), Node.COLOR_LEFT, i);
            } else {
                position = getRectNextRight(parentPosition, height);
                innerNode = makeNode(String.valueOf(root.key), new Point(position, nextTop), Node.COLOR_RIGHT, i);
            }

            innerNode.setParent(innerParent);
            parentPosition = position;

            // --
            recursivePrint(root.left, parentPosition, innerNode, p, i);
            recursivePrint(root.right, parentPosition, innerNode, p, i);
        }

    }