Inorder Preorder Поступорядоченный обход двоичного дерева

Типы обхода двоичного дерева и его преобразование из упорядоченного в предварительный-поступорядоченный

Мотивация:

  • Обход предварительного заказа при дублировании узлов и значений может создать полную копию двоичного дерева. Его также можно использовать для создания префиксного выражения (польская нотация) из деревьев выражений: предварительно пройти дерево выражений.
  • Обход по порядку очень часто используется в деревьях двоичного поиска, поскольку он возвращает значения из базового набора в порядке, в соответствии с компаратором, который установил дерево двоичного поиска (отсюда и название).
  • Пост-заказный обход при удалении или освобождении узлов и значений может удалить или освободить все двоичное дерево. Он также может генерировать постфиксное представление двоичного дерева.

мы используем stack :) Итак, поехали!

Inorder Traversal:

СЛЕВА * КОРЕНЬ * ВПРАВО

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

Псевдокод:

  1. Создать стек
  2. Вставьте корень в стек, пока не установите root = root.left continue, пока он не достигнет NULL.
  3. Если root равен нулю, а стек пуст, вернитесь, все готово.
  4. В противном случае выберите верхний узел из стека и установите его как root = popped_Node.
  5. распечатайте корень и идите вправо, root = root.right.
  6. Перейти к шагу. Конец, если

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

Вывод: в порядке

4 2 5 1 3
4 2 5 1 3

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

* КОРЕНЬ * ЛЕВЫЙ ВПРАВО

Вывод:

1 2 4 5 3 6 7
1 2 4 5 3 6 7

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

ВЛЕВО ВПРАВО * КОРЕНЬ *

Подход:

  • Мы видели, как мы выполняем обходы по порядку и по предварительному заказу без рекурсии с использованием Stack, но обход по порядку будет отличаться и немного сложнее, чем два других. Причина в том, что почтовый заказ не является хвостовым рекурсивным (операторы выполняются после рекурсивного вызова).
  • Если вы просто заметили здесь, обход после порядка - это просто обратное обходу до обхода (1 3 7 6 2 5 4, если мы сначала пройдем правый узел, а затем левый).
  • Таким образом, идея состоит в том, чтобы следовать той же методике, что и обход предварительного заказа, и вместо того, чтобы печатать его, переместите его в другой стек, чтобы они вышли в обратном порядке (LIFO).
  • В конце просто вытащите все элементы из второй стопки и распечатайте ее.

Вывод:

4 5 2 6 7 3 1
4 5 2 6 7 3 1

Ресурсы: https://en.wikipedia.org/wiki/Tree_traversal

находите все больше и больше полезных ресурсов, связанных с #ai #machinelearning #deeplearning # python… https://twitter.com/Ajinkya_Tweets

Аджинкья Джавале, https://www.linkedin.com/in/ajinkya-jawale-b3421a12a/

Https://angel.co/ajinkya-jawale

свяжитесь со мной здесь, [email protected]

милости!