struct a_tree_node{int value;struct a_tree_node *leftPTR, *rightPTR; };
Этот код будет работать нормально, поскольку мы ссылаемся на указатель на структуру, а не на ее объект, поскольку размер указателя не зависит от типа данных. Это будет зависеть от того, сколько бит ваша операционная система эффективно, ваше целое число займет сколько байт
например, на gcc sizeof(int)
равно 4, поэтому sizeof(leftPTR)
тоже самое
поэтому во время выполнения не будет рекурсии sizeof(a_tree_node)=12
(не учитывая заполнение структуры, поскольку это зависит от компилятора)
struct a_tree_node{int value;struct a_tree_node left;};
Это объявление приведет к ошибке, так как компилятор не сможет вычислить его размер
идет в бесконечной рекурсии.