Здравствуйте, varenikAA, Вы писали:
AA>buildTree возможно ли сделать рекурсих хвостовой? Мне почему-то кажется, что нет, но как это доказать не пойму.
Хвостовая рекурсия требует отсутствия операций над результатом рекурсивного вызова. Здесь же из результатов рекурсивного вызова требуется создать список и поместить их в Branch. Другими словами, хвостовая рекурсия работает с линейными структурами данных, с простыми цепочками.
Таким образом, построить tail-call не ленивое дерево от корня нельзя. Но можно собрать его через аккумулятор, для этого придется научиться подменять Leaf существующего дерева на Branch и начать с пустого дерева, обходя его каждый раз и перестраивая.