У меня есть однонаправленное дерево объектов, в котором каждый объект указывает на родителя. Учитывая объект, мне нужно получить все его поддерево потомков, как набор объектов. Объекты фактически не находятся в какой-либо структуре данных, но я могу легко получить коллекцию всех объектов.Эффективное перемещение однонаправленного дерева
Наивный подход состоит в том, чтобы исследовать каждый объект в партии, посмотреть, является ли данный объект предком, и сохранить его в стороне. Это не будет слишком эффективным ... Он несет накладные расходы O (N * N), где N - количество объектов.
Другой подход - это рекурсивный, то есть поиск прямых детей объекта и повторение процесса для следующего уровня. К сожалению, дерево однонаправлено ... нет прямого подхода к детям, и это будет только немного дешевле, чем предыдущий подход.
Мой вопрос: Есть ли эффективный алгоритм, который я здесь игнорирую?
Спасибо,
Юваль = 8-)
Должен ли алгоритм возвращать список узлов-потомков или его нужно заказать в дереве? Я не вижу, как вы можете сделать последнее, если узлы указывают только на своих предков (т. Е. Вы не можете вернуть корневой узел). – 2008-10-16 16:18:24
Это больше похоже на коллекцию взаимосвязанных списков, чем на дерево – workmad3 2008-10-16 16:20:09