← Все вопросы
Чем отличаются обходы дерева in-order, pre-order и post-order?
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
Позицией обработки корня.
Ваш ответ
Войдите, чтобы ответить на вопрос.