Примеры обратного пересечения дерева в реальном мире

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

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

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

Ответ 1

Топологическая сортировка - это последующий обход деревьев (или направленных ациклических графов).

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

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

Ответ 2

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

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

Ответ 3

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

псевдокод:

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

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

  // Post-order freeing of current node
  free(node)
}