← Все вопросы

Чем отличаются обходы дерева in-order, pre-order и post-order?

Задан 13 месяцев назад551 просмотров3 ответа
14

Учу обходы бинарного дерева, и постоянно путаю in-order / pre-order / post-order. В чём практическая разница и как запомнить, что когда выводится?

3 ответа

24

Разница только в том, КОГДА ты обрабатываешь сам узел относительно его поддеревьев:

  • pre-order: узел → левое → правое (сначала корень)
  • in-order: левое → узел → правое (корень посередине)
  • post-order: левое → правое → узел (корень в конце)
def pre(node):
    if node:
        visit(node); pre(node.left); pre(node.right)

def ino(node):
    if node:
        ino(node.left); visit(node); ino(node.right)

def post(node):
    if node:
        post(node.left); post(node.right); visit(node)

Где что нужно: in-order на бинарном дереве поиска выдаёт элементы по возрастанию; pre-order удобен для копирования/сериализации дерева; post-order — для удаления дерева или вычисления выражений (сначала операнды, потом операция).

Дмитрий Бутырев Запоминалка: pre/in/post — где стоит слово root относительно left и right: до / между / после. · 13 месяцев назад
9

Отличие в позиции обработки корня: pre — до потомков, in — между, post — после. Сам обход рекурсивно одинаковый.

6

Позицией обработки корня.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект