В университете меня учили делать дерево так: Node(id, parent_id), а дедушка Лафоре учит делать так: Node(id, child_left_id, child_right_id).
Первое решение кажется изящнее(меньше полей) и универсальней(можно делать сколько угодно потомков, не меняя структуру данных). Но почему тогда такой авторитетный товарищ выбрал второй вариант?
Как в таком подходе: Node(id, parent_id) вы будете делать обход дерева? Ведь голова дерева не содержит ссылок на потомков. Вам придется где-то держать все листовые узлы. Такая структура узлов больше похожа на стек, а не на дерево.
У дедушки - классический вариант двоичного дерева.