Если задано совершенное двоичное дерево, поменяйте местами узлы альтернативного уровня двоичного дерева.
Given tree: a / \ b c / \ / \ d e f g / \ / \ / \ / \ h i j k l m n o Modified tree: a / \ c b / \ / \ d e f g / \ / \ / \ / \ o n m l k j i h
Способ 1 (простой)
Простое решение состоит в том, чтобы сделать следующие шаги.
1) Доступ к узлам по уровням.
2) Если текущий уровень нечетный, сохраните узлы этого уровня в массиве.
3) Обратный массив и сохранить элементы обратно в дереве.
Метод 2 (Использование двух обходов)
Другой — сделать два обхода по порядку. Ниже приведены шаги, которым нужно следовать.
1) Пройдите по указанному дереву по порядку и сохраните все нечетные узлы уровня во вспомогательном массиве. Для приведенного выше примера данного дерева содержимое массива становится {h, i, b, j, k, l, m, c, n, o}
2) Обратный массив. Массив теперь становится {o, n, c, m, l, k, j, b, i, h}
3) Пройдите через дерево снова в порядке моды. При обходе дерева один за другим берут элементы из массива и сохраняют элементы из массива на каждом узле, проходящем с нечетным уровнем.
Для приведенного выше примера мы сначала пересекаем «h» в массиве выше и заменяем «h» на «o». Затем мы пересекаем 'i' и заменяем его на n.
Ниже приведена реализация вышеуказанного алгоритма.
|
Джава
|
C #
|
Выход:
Inorder Traversal of given tree h d i b j e k a l f m c n g o Inorder Traversal of modified tree o d n c m e l a k f j b i g h
Временная сложность вышеупомянутого решения составляет O (n), поскольку оно выполняет два обхода по порядку двоичного дерева.
Метод 3 (с использованием одного обхода)
|
Джава
|
python3
|
C #
|
Выход :
Inorder Traversal of given tree h d i b j e k a l f m c n g o Inorder Traversal of modified tree o d n c m e l a k f j b i g h
Спасибо Soumyajit Bhattacharyay за предложенное решение.
Эта статья предоставлена Крипалом Гауравом . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Обратные альтернативные уровни идеального бинарного дерева с использованием стека
- Количество ребер в идеальном бинарном дереве с N уровнями
- Распечатать уровни двоичного дерева в отсортированном порядке | Набор 3 (дерево задано как массив)
- Средние уровни в бинарном дереве
- Вывести все узлы между двумя заданными уровнями в двоичном дереве
- Уровни печати всех узлов в двоичном дереве
- Распечатать уровни двоичного дерева в отсортированном порядке | Набор 2 (Используя набор)
- Максимальная сумма листовых узлов среди всех уровней данного бинарного дерева
- Печать уровней бинарного дерева в отсортированном порядке
- Максимальная сумма неконечных узлов среди всех уровней данного бинарного дерева
- Вывести нечетные узлы четных уровней в порядке уровней заданного двоичного дерева
- Вывести четные позиционные узлы четных уровней в порядке уровней заданного двоичного дерева
- Вывести четные позиционные узлы нечетных уровней в порядке уровней заданного двоичного дерева
- Вывести нечетные узлы нечетных уровней в порядке уровней заданного двоичного дерева
- Проверьте, является ли данное двоичное дерево идеальным или нет
0.00 (0%) 0 votes