Добрый день. Изучаю C# и столкнулся с неким непониманием в порядке работы функции.
В данный момент решаю задачки по алгоритмам, а именно по обходу бинарного дерева.
Класс бинарного дерева:
class Node<T>
{
public int Value;
public Node<T> Left;
public Node<T> Right;
}
Метод добавления значений:
public void InsertValues(int value)
{
if (value > Value)
{
if (Right is null)
Right = new Node<T> { Value = value };
else
Right.InsertValues(value);
}
else
{
if (Left is null)
Left = new Node<T> { Value = value };
else
Left.InsertValues(value);
}
}
Инфиксный обход дерева:
public void Infix(Node<T> node)
{
if (node.Left != null)
{
Infix(node.Left);
}
Console.WriteLine(node.Value);
if (node.Right != null)
{
Infix(node.Right);
}
}
Вызовы:
class Program
{
static void Main(string[] args)
{
Node<int> node = new Node<int> { Value = 2 };
node.InsertValues(3);
node.InsertValues(1);
node.Infix(node);
}
}
Суть вопроса: Почему после первого обращения к строчке в Инфиксном обходе
if (node.Right != null), когда мы видим, что node.Right == null, мы не завершаем выполнение функции (пропуская цикл), а возвращаемся назад в строчку
Console.WriteLine(node.Value); ?