Прохождение бинарного дерева (post-order)

309
24 октября 2017, 02:31

Здравствуйте, как на с/с++ написать нерекурсивный обход бинарного дерева через стек методом post-order (сначала листья, потом корень)?

Answer 1

Т.к. рекурсию использовать нельзя, мы вместо неё будем использовать два стэка. Вот весь алгоритм, в результате его будут распечатаны все вершины бинарного дерева в post-order порядке (можно вместо распечатки делать какое-то полезное действие):

  1. Добавить корень в первый стэк.

  2. Пока первый стэк не пуст выполнять следующие два подпункта:

    2.1. Извлечь узел из вершины первого стэка, добавить его во второй стэк.

    2.2. Добавить левого затем правого ребёнка узла из п. 2.1 в первый стэк.

  3. Распечатать содержимое второго стэка, т.е. в цикле извлекать вершину второго стэка и печатать.

Замечание: в конце порядок распечатки для поддеревьев будет тот же что и при помещении в 1й стэк, т.е. мы помещали в 1й стэк левого а затем правого ребёнка, при распечатке в итоге будет раньше распечатано левое поддерево, затем правое, а затем родитель. Если нужно в распечатке иметь вначале правое поддерево а затем левое тогда нужно в 1й стэк помещать вначале правого ребёнка затем левого.

READ ALSO
Умные указатели в C++

Умные указатели в C++

Есть метод setQuackBehavior(), который принимает ссылку на абстрактный класс QuackBehaviorЭтот метод находится в классе, который имеет член std::shared_ptr<QuackBehavior>...

329
Почему не срабатывает событие @click?

Почему не срабатывает событие @click?

Событие select_list_currentClick(e) должно переключать класс open для того, чтобы появлялся селект как справа на скрине Но оно почему-то срабатывает очень...

334
jQuery - На телефонах owl.carousel показывает все слайды

jQuery - На телефонах owl.carousel показывает все слайды

На телефонах owlcarousel показывает все слайды

210