protected void rotateLeft(Node<T> node) {
        Position parentPosition = null;
        Node<T> parent = node.parent;
        if (parent != null) {
            if (node.equals(parent.lesser)) {
                // Lesser
                parentPosition = Position.LEFT;
            } else {
                // Greater
                parentPosition = Position.RIGHT;
            }
        }

        Node<T> greater = node.greater;
        node.greater = null;
        Node<T> lesser = greater.lesser;

        greater.lesser = node;
        node.parent = greater;

        node.greater = lesser;
        if (lesser != null)
            lesser.parent = node;

        if (parent!=null && parentPosition != null) {
            if (parentPosition == Position.LEFT) {
                parent.lesser = greater;
            } else {
                parent.greater = greater;
            }
            greater.parent = parent;
        } else {
            root = greater;
            greater.parent = null;
        }
    }