Если T — упорядоченное дерево с более чем одним узлом. Возможно ли, что обход T в прямом порядке посещает узлы в том же порядке, что и обход T в обратном порядке? если "да", можете привести пример. И если «Нет», не могли бы вы объяснить, почему это не может произойти?
Возможно ли, чтобы обход до заказа был в том же порядке, что и обход после заказа?
Ответы (2)
Если я не упускаю что-то болезненно очевидное, ответ будет отрицательным. Упорядоченное дерево с > 1 узлом (скажем, 2 узла) будет выглядеть так.
A B
or
A C
Обход в обратном порядке посещает узлы в порядке левый-правый-корень, а в предварительном порядке посещает узлы в порядке корень-левый-правый. Чтобы они выдавали один и тот же результат, «левое» должно быть равно «корневому», что просто не имеет смысла. В приведенном выше примере предварительный заказ будет производить AB или AC соответственно, а пост-заказ будет производить BA и CA.
В общем случае листья дерева уникальны и поэтому должны отображаться противоположным образом, если вы выполняете обход в предварительном или последующем порядке.
Однако я вижу два случая, в которых обходы до и после заказа одинаковы: одиночные элементы и повторяющиеся элементы.
С синглтоном у вас есть только один узел, поэтому не имеет значения, посещаете ли вы его до или после поиска нулевых листьев.
Что, если бы у вас было дерево с повторяющимися элементами? Если бы стратегия вставки заключалась в том, чтобы принимать любой элемент, больший или равный корневому узлу, то они выглядели бы как вырожденное дерево справа:
A
\
A
\
A
\
A
Если бы он был меньше или равен корневому узлу, у вас все равно было бы вырожденное дерево, но слева.
Теперь, если ваша стратегия вставки заключается в отбрасывании повторяющихся элементов, вы останетесь с одноэлементным случаем, в котором все еще есть обходы до и после порядка, приводящие к одним и тем же элементам.