Как именно работает блок кода ниже?В частности, как программа узнает, какую опцию возвращать?
return ancestor (node1->left(), node2)
|| ancestor (node1->right(), node2)
|| ancestor (node2->left(), node1)
|| ancestor (node2->left(), node1);
Этот блок кода является частью кода для обхода дерева, чтобы определить, является ли один узел предкомдругой, когда даны node1 и node2 в дереве.
Обратите внимание, что узел 1 и узел 2 передаются в функцию, которая отвечает за определение наличия возможных отношений предок / потомок:
bool ancestor (const Binary_node<Type> * node1, const Binary_node<Type> * node2)
{
// .... code
}