@Razer1511

Почему строчка CW выполняется повторно?

Добрый день. Изучаю 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); ?
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
Здесь нет цикла. А есть рекурсия. Изучите как работает рекурсия
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы