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

        if (root != null && root.value != 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.value != null && root.parent.left.value.equals(root.value)) {
                position = getRectNextLeft(parentPosition, height);
                innerNode = makeNode(root.value, new Point(position, nextTop), Node.COLOR_LEFT);
            } else {
                position = getRectNextRight(parentPosition, height);
                innerNode = makeNode(root.value, new Point(position, nextTop), Node.COLOR_RIGHT);
            }

            innerNode.setParent(innerParent);
            parentPosition = position;

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

    }