Указанный алгоритм действительно верный.В этом случае происходит то, что статья в Википедии содержит один фрагмент кода, который обрабатывает общий случай, в котором все предварительные заказы, обходы и обратные заказы обрабатываются в одном.
Вы можете думать о предварительном заказе, обходе и обратном заказевсе как частные случаи более общего алгоритма.В частности, предположим, что вы хотите выполнить обход дерева и выполнить некоторую операцию в определенное время во время поиска (либо предзаказ, либо порядок, либо порядок).Один из способов думать об этом заключается в том, что вы выполняете некоторую операцию предзаказа перед посещением текущего узла, некоторую операцию переупорядочения между посещением дочернего узла и самого узла и некоторую операцию после заказа после посещения узла.Любая из этих операций может быть «ничего не делать».Например, простой обход предзаказа будет определен как
- Шаг предзаказа: выполните операцию, которую хотите сделать, предзаказ
- Шаг переупорядочения: No-op
- Postorderstep: No-op
Аналогичным образом, обход по почтовому заказу будет
- Шаг предварительного заказа: No-op
- Шаг Inorder: No-op
- Шаг заказа: выполните операцию, которую хотите выполнить, заказ
Преимущество кода Википедии состоит в том, что он позволяет выполнять операции, которые требуют шага как предварительного заказа, так и заказа.Например, предположим, что вы хотите выполнить поиск по дереву, но в каждый момент времени отслеживать, какие узлы были посещены, но еще не завершены.Это можно сделать следующим образом:
- Шаг предварительного заказа: добавить текущий узел в список «активных».
- Шаг заказа: No-op
- Шаг заказа.: Удалить текущий узел из «активного» списка.
Некоторые алгоритмы, такие как Алгоритм Тарьяна SCC , на самом деле делают такие вещи (хотя, по общему признанию, это алгоритм графа и вопросотносится к деревьям).Таким образом, код Википедии дает общий случай, в котором более частые случаи, плюс этот более сложный случай, являются особыми случаями.
Надеюсь, это поможет!