Возможно ли, чтобы обход до заказа был в том же порядке, что и обход после заказа?

Если T — упорядоченное дерево с более чем одним узлом. Возможно ли, что обход T в прямом порядке посещает узлы в том же порядке, что и обход T в обратном порядке? если "да", можете привести пример. И если «Нет», не могли бы вы объяснить, почему это не может произойти?


person Omid7    schedule 07.04.2013    source источник
comment
У вас есть гипотеза?   -  person NPE    schedule 07.04.2013


Ответы (2)


Если я не упускаю что-то болезненно очевидное, ответ будет отрицательным. Упорядоченное дерево с > 1 узлом (скажем, 2 узла) будет выглядеть так.

    A    
 B                     

or

    A
        C

Обход в обратном порядке посещает узлы в порядке левый-правый-корень, а в предварительном порядке посещает узлы в порядке корень-левый-правый. Чтобы они выдавали один и тот же результат, «левое» должно быть равно «корневому», что просто не имеет смысла. В приведенном выше примере предварительный заказ будет производить AB или AC соответственно, а пост-заказ будет производить BA и CA.

person ggbranch    schedule 07.04.2013
comment
Спасибо, Так просто в одной ситуации предзаказ и пост-заказ совпадают. просто если левый или правый равен корню? есть ли другое исключение? - person Omid7; 07.04.2013
comment
левый будет равен корню, только если есть один узел - person ggbranch; 07.04.2013

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

Однако я вижу два случая, в которых обходы до и после заказа одинаковы: одиночные элементы и повторяющиеся элементы.

С синглтоном у вас есть только один узел, поэтому не имеет значения, посещаете ли вы его до или после поиска нулевых листьев.

Что, если бы у вас было дерево с повторяющимися элементами? Если бы стратегия вставки заключалась в том, чтобы принимать любой элемент, больший или равный корневому узлу, то они выглядели бы как вырожденное дерево справа:

 A
  \
   A
    \
     A
      \
       A

Если бы он был меньше или равен корневому узлу, у вас все равно было бы вырожденное дерево, но слева.

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

person Makoto    schedule 07.04.2013
comment
Спасибо, извините, я не могу проголосовать за вас обоих. Итак, если у нас есть три одинаковых элемента: A1 A2 A3; Предзаказ: А1 А2 А3; Почтовый заказ: A3 A2 A1; оба одинаковы - person Omid7; 07.04.2013
comment
Значение, полученное из узла, будет таким же, но вы посещаете разные узлы для получения значений. Это зависит от того, для чего вы хотите использовать свое дерево. - person ggbranch; 08.04.2013