Итератор составного шаблона без рекурсии - PullRequest
1 голос
/ 06 февраля 2009

Кто-нибудь писал или думал о написании итератора для составной (древовидной) структуры без использования рекурсии? Если да, можете ли вы поделиться своими идеями? Thks

Редактировать: я думал о Java для языка.

Ответы [ 2 ]

1 голос
/ 06 февраля 2009

Обход дерева без рекурсии достаточно прост. Предполагая двоичное дерево, каждый узел предположительно имеет три ссылки на другие узлы. Левый ребенок, правый ребенок и родитель. Таким образом, предполагая порядок итераций слева направо по глубине, вы переходите по ссылкам left-child в while-lop (псевдокод while current.left-child != null, current = current.left-child) если нет левого ребенка, попробуйте правого ребенка. Если правильного ребенка тоже нет, вы поднимаетесь, пока не найдете правильного ребенка (while current.right-child == null, current = current.parent)

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

Короче говоря, ваш итератор должен содержать ссылку на текущий узел и некоторую информацию о том, как он движется.

0 голосов
/ 21 ноября 2011

Вы можете получить вдохновение от этого ТАКОГО вопроса: Обратный порядок двоичного дерева без рекурсии Все, что вам нужно, - это расширить алгоритм на недвоичные деревья.

...