Используя Morris Traversal, мы можем обходить дерево без использования стека и рекурсии. Алгоритм для Preorder почти аналогичен прохождению Морриса для Inorder .
1. .. Если оставленный дочерний элемент равен нулю, выведите данные текущего узла. Переместиться к правому ребенку.
…. Иначе , Сделайте правый потомок предшественника inorder указателем на текущий узел. Возникают два случая:
……… a) Правый дочерний элемент предшествующего предшественника уже указывает на текущий узел. Установите право ребенка в NULL. Переместиться к правому потомку текущего узла.
……… б) Правильный ребенок — NULL. Установите его на текущий узел. Распечатайте данные текущего узла и перейдите к левому потомку текущего узла.
2. .. Итерировать до тех пор, пока текущий узел не станет NULL.
Ниже приведена реализация вышеуказанного алгоритма.
|
С
|
Джава
|
python3
|
C #
|
Выход:
1 2 4 8 9 5 10 11 3 6 7 1 2 4 8 9 5 10 11 3 6 7
Ограничения:
Обход Морриса изменяет дерево во время процесса. Он устанавливает правильные ссылки при движении вниз по дереву и сбрасывает правильные ссылки при движении вверх по дереву. Таким образом, алгоритм не может быть применен, если операции записи не разрешены.
Эта статья составлена Aashish Barnwal и рецензирована командой GeeksforGeeks. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Создайте полное двоичное дерево, используя его обход по предзаказу и обход по предзаказу из своего зеркального дерева
- Обратный обход Морриса с использованием бинарного дерева с резьбой
- Построить BST из заданного обхода предзаказа | Набор 2
- Итеративный обход предзаказа
- Предзаказ обхода N-арного дерева без рекурсии
- Итеративный обход предзаказа N-арного дерева
- Построить специальное дерево из заданного обхода предварительного заказа
- Построить полное k-арное дерево из его обхода по предзаказу
- Распечатать обход почтового заказа из заданных обходов Inorder и Preorder
- Найти n-й узел в обходе предзаказа двоичного дерева
- Найти самый левый и самый правый узел BST из его заданного обхода предварительного заказа
- Измените бинарное дерево, чтобы получить обход предзаказа, используя только правильные указатели
- Проверьте, может ли данный массив представлять предварительный обход дерева двоичного поиска
- Предзаказ от обходов Inorder и Postorder
- Построить дерево из заданных обходов Inorder и Preorder
0.00 (0%) 0 votes