Обход общей древовидной структуры, начиная с произвольного узла в C #

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

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

Любые предложения, пожалуйста.

ОБНОВЛЕНИЕ: Каждый из моих узлов имеет связанный с ним идентификатор. В некоторых случаях у меня есть ссылки на начальные и конечные узлы, с которых можно начать. В других случаях мне дают два идентификатора, и я проверяю, является ли данный узел начальным или конечным узлом, проверяя их идентификаторы. Я использую обход в глубину, чтобы найти начальный узел. И начальный, и конечный узлы могут находиться в любом месте иерархии. Я надеюсь, что кто-то может придумать идею для случая, когда мне уже даны ссылки как на начальный, так и на конечный узел. Кстати, узлы в дереве фактически сортируются в соответствии с порядком сортировки, который начинается с 0 для каждого из подузлов узла, и есть один корневой узел

6
задан Kemal Erdogan 18 October 2011 в 13:07
поделиться