2010-08-20 3 views
10

Я понимаю, что алгоритмы обхода дерева по порядку, по порядку и по порядку просто отлично. (Reference). Я понимаю несколько применений: в порядке для перемещения двоичных деревьев поиска по порядку, предварительный порядок клонирования дерева. Но я не могу для жизни меня придумать реальную задачу мира, для которой мне понадобится пост-ордер.Примеры обхода дерева до/после заказа

Можете ли вы привести мне пример? И: можете ли вы лучше использовать меня для предварительного обхода?

Редактировать: Может ли кто-нибудь дать мне пример, кроме деревьев выражений и RPN? Неужели это действительно все пост-порядок?

+0

хороший вопрос! – Lazer

ответ

11

Topological sorting это пост-порядок обхода деревьев (или ориентированных ациклических графов).

Идея заключается в том, что узлы графа представляют задачи и ребро из A к B указывает на то, что A должен быть выполнен перед B. Топологическая сортировка организует эти задачи в последовательности, так что все зависимости задачи появляются раньше самой задачи. Любая система построения, такая как UNIX make, должна реализовать этот алгоритм.

Пример, который Дарио упомянул - уничтожение всех узлов дерева с ручным управлением памятью - пример этой проблемы. В конце концов, задача уничтожения узла зависит от разрушения его детей.

+0

Это отличный ответ. Помня, что деревья вырождаются, открывается всякая функциональность. И топологическая сортировка чрезвычайно полезна. – Plutor

+0

Почему это называется топологической сортировкой, а не, скажем, планированием или чем-то, или что означает «топологический» в данном контексте? – Shawn

+0

@Shawn: Удар меня. Вероятно, это связано только с топологией графика/сети. –

8

Почтовый заказ (может быть) использован компиляторами. Рассмотрим дерево выражений для a + b + c, для машинного языка потребуется последовательность, например a b + c +. Это также называется Reverse polish Notation (RPN). На странице Википедии в нем написано: «RPN aka Postfix»

Post-order также требуется для уничтожения дерева, так же как и предварительный заказ для создания/клонирования.

+1

Уничтожение дерева, это хороший момент. – Plutor

+0

+1 Это похоже на то, что вы можете клонировать дерево, используя предварительный заказ, и уничтожать его, используя обратные шаги, например, после заказа. Должны быть некоторые другие области, где предварительный или почтовый порядок будет очень эффективным. – Lazer

4

Как отметил Хенк Холтерман, уничтожение дерева с использованием ручного управления памятью обычно является обходным порядком.

Псевдокод:

destroy(node) { 
    if (node == null) return; 

    destroy(node.left) 
    destroy(node.right) 

    // Post-order freeing of current node 
    free(node) 
} 
Смежные вопросы