Для заданного N-арного дерева задача состоит в том, чтобы итеративно найти обход данного дерева по порядку.
Примеры:
Input: 1 / | \ 3 2 4 / \ 5 6 Output: [5, 6, 3, 2, 4, 1] Input: 1 / \ 2 3 Output: [2, 3, 1]
Подходить:
Мы уже обсуждали итеративный обход по порядку двоичного дерева с использованием одного стека. Мы расширим этот подход для n-арного дерева. Идея очень проста: для каждого узла мы должны пройти все дочерние элементы этого узла (слева направо), прежде чем пройти через узел.
Псевдокод:
- Начните с корня.
- Повторите все шаги ниже, пока ни root! = Null ИЛИ стек не будет пустым.
- Если root! = Null, тогда протолкните корень, и это индекс в стек и будет продолжаться в направлении левого узла.
- Вытащите элемент из стека и распечатайте его.
- Извлечь все элементы из стека, пока стек не будет пустым && popped узел является последним потомком
это родитель. - Назначьте корень следующим дочерним элементам вершины стека.
Ниже приведена реализация вышеуказанного подхода:
|
C #
|
Выход:
[5, 6, 3, 2, 4, 1]
Рекомендуемые посты:
- Итеративный обход Postorder | Набор 3
- Итеративный обход почтового заказа | Набор 2 (с использованием одного стека)
- Итеративный обход почтового заказа | Набор 1 (с использованием двух стеков)
- Найти n-й узел в обходе по порядку двоичного дерева
- Обращение по порядку в двоичном дереве без рекурсии и без стека
- Итеративный обход предзаказа N-арного дерева
- Итерационный диагональный обход двоичного дерева
- Итеративный обход границы полного двоичного дерева
- Найти прохождение порядка BST из предзаказа
- Построить BST из заданного пост-заказа обхода с помощью стека
- Распечатать обход почтового заказа из заданных обходов Inorder и Preorder
- Создайте полное двоичное дерево, используя его обход по предзаказу и обход по предзаказу из своего зеркального дерева
- Итеративный обход предзаказа
- Итеративная глубина первого обхода графика
- Построить бинарное дерево поиска по заданному порядку
0.00 (0%) 0 votes