private void drawNode(Node n, Graphics g, int x, int y)
    {
        if (n == null)  return;
        g.setColor(n.isRed ? Color.red : Color.GRAY);
        if (n.parent == null)  g.setColor(Color.DARK_GRAY);
        g.fillOval(x, y * 64, 32, 32);
        g.setColor(Color.BLACK);
        if (n.left != null)   g.drawLine(x+16, y * 64 + 16, x - 128 / y + 16, (y+1) * 64 + 16);
        if (n.right != null)   g.drawLine(x+16, y * 64 + 16, x + 128 / y + 16, (y+1) * 64 + 16);
        g.setFont(new Font("Serif", Font.BOLD, 32));
        g.drawString(n.key.toString(), x, y * 64);
        drawNode(n.left, g, x - 128 / y, y+1);
        drawNode(n.right, g, x + 128 / y, y+1);
    }