¿Cómo encontrar el primer ancestro común de un nodo en un árbol binario?

Seguir es mi algoritmo para encontrar el primer ancestro común. Pero no sé cómo calcular la complejidad del tiempo, ¿alguien puede ayudarme?

public Tree commonAncestor(Tree root, Tree p, Tree q) {
    if (covers(root.left, p) && covers(root.left, q))
        return commonAncestor(root.left, p, q);
    if (covers(root.right, p) && covers(root.right, q))
        return commonAncestor(root.right, p, q);
    return root;
}
private boolean covers(Tree root, Tree p) { /* is p a child of root? */
    if (root == null) return false;
    if (root == p) return true;
    return covers(root.left, p) || covers(root.right, p);
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta