Обход дерева. Pre- и Postorder для общих деревьев, inorder только для бинарных деревьев?

Я читал, что обход в предварительном и обратном порядке также был определен для общих (n-арных) деревьев, например:

preOrder(v)
  if(v==null) return;
  print(v)
  for each child w of v
     preOrder(w)

postOrder(v)
  if(v==null) return;
  for each child w of v
     postOrder(w)
  print(v)

Но неупорядоченный обход подходит только для бинарных деревьев. Почему я не могу создать метод обхода inOrder, как в примерах pre и postOrder, показанных выше?


person knowledge    schedule 07.04.2021    source источник


Ответы (1)


Конечно, вы можете определить обход, который будет n-арным обобщением того, что inorder есть для бинарных деревьев.

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

Для n-ary можно, например, сказать, что узел следует посетить после того, как были посещены его k крайние левые дочерние элементы, но до любого другого из его дочерних элементов. k будет предопределенной константой, и когда k=1, а ваше дерево бинарное, тогда у вас будет тот же обход, что и при классическом inorder обход.

inOrder(k, v)
  if(v==null) return;
  for each child w among the first k children of v:
      inOrder(k, w)
  print(v)
  for each child w not among the first k children of v:
      inOrder(k, w)

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

person trincot    schedule 07.04.2021
comment
Вы получили ответ на свой вопрос? - person trincot; 08.04.2021
comment
Спасибо за Ваш ответ. Но почему неупорядоченный обход n-арного дерева не является полезным или неуклюжим в отличие от обхода до и после порядка? - person knowledge; 08.04.2021
comment
Это всего лишь личное мнение... Я имею в виду, что выбор k совершенно произволен, и тогда мне интересно, какое практическое применение может иметь такой обход. Я не могу думать ни о каком. - person trincot; 08.04.2021
comment
ХОРОШО. Спасибо. Какую практическую пользу имеют пре- и постпорядок для n-арных деревьев? - person knowledge; 08.04.2021
comment
Примером, когда предварительный порядок удобен, является расширение каждого узла на расстояние, которое он имеет до корня дерева. Примером практического применения обратного порядка является расширение каждого узла высотой его поддерева. В бинарных деревьях неупорядоченный обход удобен, если речь идет о дереве поиска. - person trincot; 08.04.2021